长字符串转换double类型时,因为double类型有效数字位(1位整数位+15位小数位),当修改前16位时,精度不丢失。
当修改16位之后的数字时,会出现精度丢失
解决方法,使用BigDecimal
public class test { public static void main(String[] args) { String varnum1 = "18127154912571512545"; String varnum2 = "18127154912571512345"; System.out.println(varnum1); System.out.println(varnum2); double doublenum1 = Double.parseDouble(varnum1); double doublenum2 = Double.parseDouble(varnum2); System.out.println(doublenum1); System.out.println(doublenum2); System.out.println(doublenum1 == doublenum2); BigDecimal doublenum3 = BigDecimal.valueOf(Double.valueOf(varnum1)); BigDecimal doublenum4 = BigDecimal.valueOf(Double.valueOf(varnum2)); System.out.println(doublenum3); System.out.println(doublenum4); System.out.println(doublenum3 == doublenum4); } }
输出结果: