2

有没有人遇到过这个:

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 在库中无法访问)。

4

2 回答 2

4

第二个示例永远不会起作用,因为文档没有提到f字符串中有关 an 的任何内容:

字符串表示由一个可选的符号'+'( '\u002B') 或'-'( '\u002D') 组成,后跟零个或多个十进制数字的序列(“整数”),可选地后跟一个分数,可选地后跟一个指数......

一种解决方法可能是简单地剥离f字符串。那么它应该是有效的。

于 2012-11-13T21:41:28.763 回答
0

BigDecimal 有自己的文档。根据BigDecimal javadoc

此构造函数与 Float.toString(float) 和 Double.toString(double) 返回的值兼容。

它没有提到任何关于 Float.valueOf() 的内容。

于 2012-11-14T20:48:01.073 回答