【发布时间】:2011-04-19 05:54:16
【问题描述】:
如何在java中将float转换为bigDecimal?
【问题讨论】:
标签: java floating-point bigdecimal
如何在java中将float转换为bigDecimal?
【问题讨论】:
标签: java floating-point bigdecimal
BigDecimal value = new BigDecimal(Float.toString(123.4f));
从javadocs 开始,字符串构造函数通常是将float 转换为BigDecimal 的首选方法,因为它不会受到BigDecimal(double) 构造函数的不可预测性的影响。
引用自文档:
注意:对于其他 float 和 double NaN 和 ±Infinity 的值,此构造函数与 Float.toString(float) 和 Double.toString(double) 返回的值兼容。 这通常是将 float 或 double 转换为 BigDecimal 的首选方法,因为它不会受到 BigDecimal(double) 构造函数的不可预测性的影响。
【讨论】:
float 显式转换为字符串并不能帮助您自动解决不可预测性 - 您需要注意正确格式化值(舍入等)。
float f = 45.6f;
BigDecimal bd = BigDecimal.valueOf(f);
引用自文档:
注意:这通常是转换双精度(或 float) 转换为 BigDecimal,因为返回的值等于 由使用结果构造 BigDecimal 产生的 Double.toString(double).
【讨论】:
Double.toString(float) 产生的结果与 Float.toString(float) 不同。
BigDecimal.valueOf( 1.1f ) 导致1.100000023841858
小数点后3位精度:
BigDecimal value = new BigDecimal(f,
new MathContext(3, RoundingMode.HALF_EVEN));
【讨论】:
据我所知:
public static BigDecimal floatToBigDecimal(Float a){
if(a == null || a.isInfinite() || a.isNaN()){
return BigDecimal.ZERO;
}
try{
return BigDecimal.valueOf(a);
}catch(Exception e){
return BigDecimal.ZERO;
}
}
*注意:这通常是将双精度(或浮点数)转换为 BigDecimal 的首选方法,因为返回的值等于从使用 Double.toString(double) 的结果构造 BigDecimal 的结果。
public static BigDecimal valueOf(double val)
参数:
val - double 转换为 BigDecimal。
返回:
一个 BigDecimal,其值等于或大约等于 val 的值。
抛出:
NumberFormatException - 如果 val 是无限或 NaN。
自:
1.5
我已经检查了 Infinite 或 Not a Number,这样 NumberFormatException 的机会就会减少
【讨论】: