我是靠谱客的博主 忧虑航空,最近开发中收集的这篇文章主要介绍Double-精度丢失-解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.可以在传递给服务器时采用字符串的形式进行参数的传递。因为double天然的缺陷,在保存成二进制时会出现精度丢失。保存成字符串是一种非常容易的解决方案。
(精度丢失原因,更详细的请自行百度,我的目的只是实现数据的可视性、保留两位或者多位)
2.使用NSDecimalNumber进行计算。
//注意:

// 1.一般我们保存成.2f时,会进行四舍五入。
// 2.double转换为NSInteger时,会把小数点后的小数给截取掉。
double x1 = 0.026;
System.out.println(String.format("%.2f", x1));

2.数据转换

// 方案一:
get_double = (double)(Math.round(result_value*100)/100.0)
// 方案二:
DecimalFormat df = new DecimalFormat("#.##");
get_double = Double.ParseDouble(df.format(result_value));
// 方案三:
get_double = Double.ParseDouble(String.format("%.2f",result_value));
// 方案四:
BigDecimal bd = new BigDecimalresult_value();
BigDecimal  bd2 = bd.setScale(2,BigDecimal  .ROUND_HALF_UP);
get_double = Double.ParseDouble(bd2.ToString());
// 自己亲测 ok
public static void main(String[] args) {
    DecimalFormat df = new DecimalFormat("#.##");
    Double dou = 3.115;
    System.out.println(df.format(dou)); // 3.12
    System.out.println(String.format("%.2f",dou));// 3.12
    System.out.println((Math.round(dou*100)/100.0)); //3.12
    BigDecimal bd = new BigDecimal(dou);
    BigDecimal bigDecimal = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println("bigDecimal = " + bigDecimal); // 3.12
    
    }

最后

以上就是忧虑航空为你收集整理的Double-精度丢失-解决方法的全部内容,希望文章能够帮你解决Double-精度丢失-解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部