Java中double值的乘法运算符的保证精度是多少?java中双精度乘法的精度?
例如,2.2 * 100是220.00000000000003,但是220是双数。 220.00000000000003是后220
Java中double值的乘法运算符的保证精度是多少?java中双精度乘法的精度?
例如,2.2 * 100是220.00000000000003,但是220是双数。 220.00000000000003是后220
乘法工作正常,但2.2
不能完全按照双表示。最近的双打:
一些软件将打印后的值作为2.2
,但这并不意味着它是精确的。这只是意味着它被视为“足够接近”。
谢谢,我错误地认为事实println打印2.2意味着它是确切的 –
下一个双重如果您正在使用财务数据时不使用float or double
只需使用java.math.BigDecimal
谢谢,但这不是我问的问题 –
你问过double的倍数,试着做同样的操作,但只是使用BigDecimal,你的问题就解决了。 –
我的问题是关于乘法运算的准确性,因为我读过[每个计算机科学家应该知道的关于浮点数的内容](http://download.oracle.com/docs/cd/E19957-01/806 -3568/ncg_goldberg.html)“IEEE标准要求加法,减法,乘法和除法的结果完全取整。也就是说,结果必须精确计算,然后四舍五入到最接近的浮点数(使用round到even)。“,我惊讶地收到了我没有预料到的答案。@duskwuff在下面解释了为什么会发生这种情况。 –
大巴山:这取决于你的号码multiplicating,看到浮点数字是如何在Java中实现(在大多数语言)。 Java中的浮点数主要是IEEE-754。我建议引人入胜的阅读:*“每个计算机科学家应该知道的浮点数字”* http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html请注意“科学家“的名字:如果你没有进行科学的计算,如果你使用浮点数,你可能是错误的。 – SyntaxT3rr0r
- 关闭ulp! – Atreys