您的位置:首页 > 其它

float、double计算中精度丢失的处理

2017-11-08 15:42 507 查看
参考http://blog.csdn.net/luweicheng24/article/details/77800688

import java.math.BigDecimal;

public class T {
public static void main(String[] args) {
String aaString="37.10";
System.err.println(Double.valueOf(aaString));
System.err.println(Float.valueOf(aaString));

float amount =37.10f;
float amount2 =amount*100;
float amount4 =amount*100f;
long amount3 =(long)amount2;

System.err.println(amount);
System.err.println(amount2);
System.err.println(amount3);
System.err.println(amount4);

//
BigDecimal bigDecimal1 = new BigDecimal(Float.toString(amount));
System.err.println(bigDecimal1);
BigDecimal bigDecimal2 = new BigDecimal(Float.toString(100));
System.err.println(bigDecimal2);

BigDecimal result = bigDecimal1.multiply(bigDecimal2);
System.err.println(result);

long longValue =result.longValue();

System.err.println(longValue);

}
}


37.1

37.1

37.1

3709.9998

3709

3709.9998

37.1

100.0

3710.00

3710

1、String 转 float不会丢失精度;
2、float乘法计算会丢失精度、
乘积总是在一个正确的结果左右偏0.0000**1,这是因为当两个float数值相乘时,底层采用转换成二进制来进行乘法的运算
3、采用BigDecimal 可以实现高精度运算
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: