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

来源:互联网 发布:知左手边那个字怎么读 编辑:程序博客网 时间:2024/06/12 05:45

参考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不会丢失精度;2float乘法计算会丢失精度、乘积总是在一个正确的结果左右偏0.0000**1,这是因为当两个float数值相乘时,底层采用转换成二进制来进行乘法的运算3、采用BigDecimal 可以实现高精度运算