BigDecimal.floatValue与Float.valueOf

时间:2012-11-13 21:33:44

标签: java

有没有人遇到过这个:

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在库中不可访问)。

2 个答案:

答案 0 :(得分:4)

第二个例子永远不会有效,因为the documentation没有提及字符串中f的任何内容:

  

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

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

答案 1 :(得分:0)

BigDecimal有自己的文档。根据{{​​3}}

  

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

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