如何知道BigDecimal是否可以完全转换为float或double?
类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),但它看起来凌乱。我想问一下这里,因为可能(必须!)是一个更简单的解决方案。 需要明确的是,我不需要高性能的解决方案。