java在BigDecimal上下文中,用小整数值初始化的双精度能否准确地使用?
有充分的证据表明,使用双精度会导致不准确,而BigDecimal可以保证准确性,只要混合中没有双精度
然而,如果所讨论的双精度是一个小整数,那么精度有保证吗
例如,尽管以下内容不准确/不安全:
BigDecimal bdDouble = new BigDecimal(0.1d); // 0.1000000000000000055511151231257827021181583404541015625
以下内容是否始终准确/安全
BigDecimal bdDouble = new BigDecimal(1.0d); // 1
假设小整数倍与大小数一起使用是安全的吗?如果是,会导致不准确的最小整数是什么
>>;回复初始答案的其他信息:
谢谢你的回答。非常有帮助
只是想补充一点细节,我有一个传统的接口,它提供了双精度,但我可以确定,这些双精度将表示通过双精度从字符串转换为双精度的整数。parseDouble(字符串),其中字符串是保证的整数表示形式
如果可以避免的话,我不想创建一个传递字符串或大小数的新接口
我可以立即在接口的我这边将double转换为BigDecimal,并使用BigDecimal调用进行所有内部计算,但我想确保这与创建新的BigDecimal/String接口一样安全
考虑到在我最初的示例中,使用0.1d并不能准确地得到0.1,如实际的BigDecimal为0.10000000000000055551151231257827021181583404541015625这一事实所示,一些分数似乎会引入不精确性
另一方面,在我最初的例子中,使用1.0d确实准确地得到了1,因此似乎整数保持了准确性。如果我正确理解了你的答案,那么这个值可以保证达到2^53
这是正确的假设吗
# 1 楼答案
简短的回答是否定的。由于浮点变量存储在内存中的方式,没有“小”值0.000001使用与100000相同的位数,每个值都以相同的方式表示0。xxx。。艾伊
初始化BigDecimal的更好方法是用字符串初始化它