dog*_*ane 47

BigDecimal value = new BigDecimal(Float.toString(123.4f));
Run Code Online (Sandbox Code Playgroud)

javadocs开始,字符串构造函数通常是将a float转换为BigDecimal 的首选方法,因为它不会受到BigDecimal(double)构造函数的不可预测性的影响.

从文档引用:

注意:对于其他float和double NaN以及±Infinity的值,此构造函数与Float.toString(float)和Double.toString(double)返回的值兼容.这通常是将float或double转换为BigDecimal的首选方法,因为它不会受到BigDecimal(double)构造函数的不可预测性的影响.

  • 但是将`float`转换为String显然无法帮助您自动解决不可预测性 - 您需要注意正确格式化值(舍入等). (5认同)

Spa*_*key 20

float f = 45.6f;
BigDecimal bd = BigDecimal.valueOf(f);
Run Code Online (Sandbox Code Playgroud)

从文件引用:

注意:这通常是将double(或float)转换为BigDecimal的首选方法,因为返回的值等于从使用Double.toString(double)的结果构造BigDecimal所产生的值.

参考:BigDecimal(Java Platform SE 6)

  • `BigDecimal.valueOf( 1.1f )` 结果为 `1.100000023841858` (4认同)
  • Double.toString(float)产生的结果与Float.toString(float)产生的结果不同。 (2认同)

Mau*_*rry 8

对于小数点后3位数的精度:

BigDecimal value = new BigDecimal(f,
        new MathContext(3, RoundingMode.HALF_EVEN));
Run Code Online (Sandbox Code Playgroud)