是否必须使用BigDecimal计算货币(Java)?
PC是否有可能错误地添加2个十进制浮点数是否必须使用BigDecimal计算货币(Java)?,java,Java,PC是否有可能错误地添加2个十进制浮点数 0.13 + 0.21 =0.340000000004 如果我们把这两个数相加,我们就不会有额外的分数错误了,对吗?因为这不是逻辑,但计算机可以做到 这是电脑问题吗 如何在Java中正确使用BigDecimal?这不是强制性的,但它是一种良好的实践,至少有四个原因: 货币总额可以任意增长(假设你在一家银行工作,你不想让系统因溢出而发疯)。虽然十亿美元可能看起来是一大笔钱,但考虑到在某些货币中,十亿或甚至一兆可能不是那么多。 由于浮点近似,浮点数会受到侵
0.13 + 0.21 =0.340000000004
如果我们把这两个数相加,我们就不会有额外的分数错误了,对吗?因为这不是逻辑,但计算机可以做到
这是电脑问题吗
如何在Java中正确使用BigDecimal?这不是强制性的,但它是一种良好的实践,至少有四个原因:
1e-37$
NaN
美元意味着什么长期以来,浮点运算一直是个问题。这就是为什么鼓励使用
BigDecimal
。对于您关于如何正确使用它的问题,我有一个简单的示例,可以帮助您了解如何与一起使用
这是因为二进制的转换是不均匀的。与使用十进制时分数1/3变为0.33333相同 浮点数的标准称为IEEE 754,使用32位 这32位由以下部分组成
- 符号=1位(0=+,1=-)
- 指数=8位
- 尾数=23位
00111110 10101110 00010100 01111011
当计算机将其转换回十进制fomrat时,结果并不完全相同:
00111110 10101110 00010100 01111011
3.400000035762786865234375E-1
只需使用
int
,或long
,并以美分计算,而不是美元(或任何您拥有的货币)。PC是什么意思?这是一个浮点问题…你必须知道当我们谈论浮点数时,0.13不是0.130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,这个问题确实让很多人感到困惑people@cahen投票被否决是因为这个问题没有显示任何研究成果。在Google或Wikipedia上快速搜索已经找到答案。另请参见如何将字符串转换为BigDecimal?@Tum-BigDecimal有许多重载构造函数,这些构造函数接受几乎所有的基本数据类型,并将字符串作为参数。我编辑了答案以反映同样的情况。
00111110 10101110 00010100 01111011
3.400000035762786865234375E-1