IBM java 8中的BigDecimal在使用MathContext添加浮点数时计算的值不正确。下面是示例代码
MathContext context = MathContext.DECIMAL64;
BigDecimal p = BigDecimal.valueOf(0.05000);
BigDecimal test = p.divide(BigDecimal.valueOf(12), context);
System.out.println(test.add(BigDecimal.ONE, context));
上面的代码打印出来1.000000000000000而不是1.004166666666666667
然而,在上面的最后一行代码中,如果删除MathContext,它将返回正确的值1.0041666666666667。
注意:当使用相同的JVM调试上述代码时,在调试模式下,该值也是1.0041666666666667。
问:为什么它会导致JVM在有/没有MathContext或在调试模式下返回不同的值?
使用IBM JDK 1.6、1.8和Oracle JDK 1.8进行测试。仅在IBM JDK 1.8中遇到此问题
下面的IBM JDK 1.8存在此问题
Java版本"1.8.0"Java(TM)SE运行时环境(build pwa6480sr3-20160428_01(SR3))IBMJ9 VM(build 2.8, JRE 1.8.0 Windows 7 amd64-64压缩引用20160427_301573(JIT禁用,AOT禁用)J9VM-R28_Java8_SR3_20160427_1620_B301573GC-R28_Java8_SR3_20160427_1620_B301573_CMPRSSJ9CL-20160427_301573)JCL-20160421_01基于Oracle jdk8u91-b14
我尝试使用MathContext。DECIMAL128
。我看到代码工作正常。尝试使用它。我想我们有问题,因为BigDecimal
数据的位大小。
注意:如果MathContext从20到20,它可以正常工作。
问题内容: 我似乎在使用浮点数时失去了很多精度。 例如,我需要求解一个矩阵: 这是我用来从文本文件导入矩阵的代码: 我需要使用gauss-seidel进行求解,因此需要重新排列x,y和z的方程式: 这是我用来重新排列方程式的代码。是系数矩阵,是答案向量: 但是,我得到的答案并不精确到小数位。 例如,从上面重新排列第二个方程式后,我应该得到: 我得到的是: 这看起来似乎不是一个大问题,但是当您将数字
我正在努力解决一个浮点数问题,其中var变化返回为0.0999循环,我需要返回0.01(一便士)。由于这个问题,代码运行良好,除了最后一分钱。这是我在这里的第一个帖子,所以请原谅格式... 提前道谢!
问题内容: 我的表中有以下列表。 我怎样才能得到小数点后的位数。 重复?: 我已经检查了现有的帖子,但是没有正确的方法来处理 数字 。 结果 编辑 :花了一些宝贵的时间后,我发现了一些相对简单的脚本来处理此问题。 问题答案: 我找到了一些简单的脚本(相对于我而言)来处理此问题。 此处仅用于处理不带小数部分的浮点数。如果没有没有小数部分的值,那么这很简单 希望对您有帮助。完整脚本如下
问题内容: 我有一个使用浮点参数的函数(通常是整数或具有一位有效数字的十进制数),我需要将输出的值输出到具有两位小数的字符串中(5-> 5.00、5.5-> 5.50等)。如何在Python中执行此操作? 问题答案: 由于这篇文章可能会在这里出现一段时间,因此我们还要指出python 3语法:
我想在提交时显示一个弹出窗口,如果值小于max属性。我可以使用如下的HTML5属性实现这一点:,但问题是,当max值是像这样的浮点数时,它会显示另一个弹出窗口,说明该值必须小于21。 我已经搜索过了,我可以用Javascript解决这个问题,但我希望使用max属性,即使值是浮点数。 我希望表单能够提交即使值是21或21.1,除非它是21.2或更多。
问题内容: 我正在读取一个带有浮点数的文本文件,这些数字都带有1或2个小数点。我正在使用将线转换为浮点数,并在失败的情况下引发。我将所有花车存储在列表中。打印时,我想将其打印为2个小数位的浮点数。 假设我有一个文本文件,其编号为-3,65、9,17、1。我阅读了每个文件,然后将它们转换为float并将它们附加到列表中。现在在Python 2中,调用return 。但是在Python 3中,-3.6