如何在 java 中从 float 转换为 bigDecimal?
4 回答
BigDecimal value = new BigDecimal(Float.toString(123.4f));
从javadocs来看,字符串构造函数通常是将 afloat
转换为 BigDecimal 的首选方法,因为它不受BigDecimal(double)
构造函数的不可预测性的影响。
从文档中引用:
注意:对于其他 float 和 double NaN 和 ±Infinity 的值,此构造函数与 Float.toString(float) 和 Double.toString(double) 返回的值兼容。这通常是将 float 或 double 转换为 BigDecimal 的首选方法,因为它不会受到 BigDecimal(double) 构造函数的不可预测性的影响。
float f = 45.6f;
BigDecimal bd = BigDecimal.valueOf(f);
从文档中引用:
注意:这通常是将双精度(或浮点数)转换为 BigDecimal 的首选方法,因为返回的值等于从使用 Double.toString(double) 的结果构造 BigDecimal 的结果。
对于小数点后 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 的结果。
公共静态 BigDecimal valueOf(double val)
参数:
val - double 转换为 BigDecimal。
返回:
一个 BigDecimal,其值等于或大约等于 val 的值。
抛出:
NumberFormatException - 如果 val 是无限的或 NaN。
自:
1.5
我检查了 Infinite 或 Not a Number,这样 NumberFormatException 的机会就更少了