类BigDecimal
有一些有用的方法来保证无损转换:
byteValueExact()
shortValueExact()
intValueExact()
longValueExact()
但是,方法floatValueExact()
和doubleValueExact()
不存在。
我阅读了有关方法floatValue()
和的OpenJDK源代码doubleValue()
。两者似乎分别回退到Float.parseFloat()
和Double.parseDouble()
,它们可能返回正无穷大。例如,解析10,000个9s的字符串将返回正无穷大。据我了解,BigDecimal
没有内部无限的概念。此外,解析100路787-9的字符串作为double
给出1.0E100
,这是不无穷大,但失去精度。
什么是一个合理的实现floatValueExact()
和doubleValueExact()
?
我想到了一个double
解决方案相结合BigDecimal.doubleValue()
,BigDecial.toString()
,Double.parseDouble(String)
和Double.toString(double)
,但它看起来凌乱。我想问一下这里,因为可能(必须!)是一个更简单的解决方案。
需要明确的是,我不需要高性能的解决方案。