有没有人遇到过这个:
System.out.println("value of: " + Float.valueOf("3.0f")); // ok, prints 3.0
System.out.println(new BigDecimal("3.0f").floatValue()); // NumberFormatException
我认为这里缺乏一致性是一个错误,其中BigDecimal(String)不遵循与Float.valueOf()相同的规范(我检查了JDK文档)。
我正在使用一个强制我通过BigDecimal的库,但是我必须在那里发送“3.0f”。是否有已知的解决方法(BigDecimal在库中不可访问)。
答案 0 :(得分:4)
第二个例子永远不会有效,因为the documentation没有提及字符串中f
的任何内容:
字符串表示由可选符号
'+'
('\u002B'
)或'-'
('\u002D'
)组成,后跟一个零或更多十进制数字的序列(“整数“),可选地后跟一个分数,可选地后跟一个指数......
解决方法可能只是简单地剥离字符串的f
。那应该是有效的。
答案 1 :(得分:0)
BigDecimal有自己的文档。根据{{3}}
此构造函数与返回的值兼容 Float.toString(float)和Double.toString(double)。
它没有提到任何关于Float.valueOf()的内容。