我是靠谱客的博主 忧虑航空,这篇文章主要介绍Double-精度丢失-解决方法,现在分享给大家,希望可以做个参考。

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

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

2.数据转换

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
// 方案一: 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());
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
// 自己亲测 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-精度丢失-解决方法内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部