当前位置: 首页 > 面试题库 >

如何解决java中的双精度问题

潘翊歌
2023-03-14
问题内容

我该如何克服Java android中双精度乘法的精度问题?请注意,我正在将字符串值转换为double值。

例如:当我将两个double值相乘时:

double d1 = Double.valueOf("0.3").doubleValue() * Double.valueOf("3").doubleValue();
System.out.println("Result of multiplication : "+d1);

我得到以下结果:0.8999999999999999

我得到的一些结果是。

0.6 * 3 = 1.7999999999999998;
0.2 * 0.2 = 0.04000000000000001;
等等

除了上述结果外,我想得到以下结果。

0.3 * 3 = 0.9;
0.6 * 3 = 1.8;
0.2 * 0.2 = 0.04;

请记住,我没有尝试将其四舍五入到最接近的整数。


问题答案:

您实际上应该使用java.math.BigDecimal以避免任何精度问题,并始终使用BigDecimal(String)构造函数。

BigDecimal result = new BigDecimal("0.3").multiply( new BigDecimal("3.0") );


 类似资料:
  • 问题内容: 似乎减法正在引发某种问题,并且结果值是错误的。 78.75 = 787.5 * 10.0 / 100d 708.75 = 787.5-78.75 877.8499999999999 = 1586.6-708.75 最终的期望值为877.85。 应该怎么做才能确保计算正确? 问题答案: 要控制浮点算术的精度,应使用java.math.BigDecimal。阅读John Zukowski的

  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(

  • 问题内容: 是一个字符串,而%d是一个小数,我想…但是放入时 ..引发异常,告诉我!= lang.double。有想法吗? 问题答案: 是供整数使用的,它同时适用于和类型:

  • 本文向大家介绍Java中浮点数精度问题的解决方法,包括了Java中浮点数精度问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 问题描述 在项目中用Java做浮点数计算时,发现对于4.015*100这样的计算,结果不是预料中的401.5,而是401.49999999999994。如此长的位数,对于显示来说很不友好。 问题原因:浮点数表示 查阅相关资料,发现原因是:计算机中的浮点数并不能完全精确

  • 本文向大家介绍js如何解决数字精度丢失的问题?相关面试题,主要包含被问及js如何解决数字精度丢失的问题?时的应答技巧和注意事项,需要的朋友参考一下 const verifyFunc = (left, right) => { return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2); }; console.log(verifyFu

  • 问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。