有充分证据表明,使用double会导致不准确,只要混合中没有双打,BigDecimal就能保证准确性.
但是,如果双重问题是一个小的整数,是否保证了准确性?
例如,虽然以下内容不准确/不安全:
BigDecimal bdDouble = new BigDecimal(0.1d); // 0.1000000000000000055511151231257827021181583404541015625
Run Code Online (Sandbox Code Playgroud)
以下内容总是准确/安全吗?
BigDecimal bdDouble = new BigDecimal(1.0d); // 1
Run Code Online (Sandbox Code Playgroud)
假设使用BigDecimals可以安全地使用小的整数双打是否安全 - 如果是这样,引入不准确性的最小整数是多少?
>>回复初步答案的其他信息:
谢谢你的回答.很有帮助.
只是为了添加更多细节,我有一个提供双打的遗留接口,但我可以肯定这些双打将代表整数,它们自己通过Double.parseDouble(String)从Strings转换为double,其中String是保证的整数表示.
如果我可以避免它,我不想创建一个新的接口,它传递我的字符串或BigDecimals.
我可以立即将double转换为我接口上的BigDecimal,并使用BigDecimal调用进行所有内部计算,但我想确保它与创建新的BigDecimal/String接口一样安全.
鉴于在我的原始示例中使用0.1d并不能准确地得出0.1,如实际BigDecimal为0.1000000000000000055511151231257827021181583404541015625这一事实所示,似乎某些分数会引入不准确性.
另一方面,鉴于在我的原始示例中使用1.0d确实准确地得到1,看起来整数保持准确性.如果我正确理解你的答案,似乎保证最高值为2 ^ 53.
这是正确的假设吗?