大家好,又见面了,我是你们的朋友全栈君。
因为double
有精度丢失的问题,所以关于小数点的计算通常使用BigDecimal
来计算。
但直接调用BigDecimal
的double
构造函数,会出现精度丢失问题。
/** * BigDecimal传double的构造函数 */
public BigDecimal(double val) {
this(val,MathContext.UNLIMITED);
}
例子:
public class Demo1 {
public static void main(String[] args) {
//输出结果:4.79999999999999982236431605997495353221893310546875
System.out.println(new BigDecimal(4.8));
}
}
解决方案:
将double
类型转为String
类型就可以了。
调用的是BigDecimal
的String
构造函数。
public class Demo1 {
public static void main(String[] args) {
double d = 4.8;
//输出结果:4.79999999999999982236431605997495353221893310546875
System.out.println(new BigDecimal(d));
//输出结果:4.8
System.out.println(new BigDecimal(String.valueOf(d)));
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136242.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...