如何获取小数点后的数字? (java)[duplicate]

|                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
        好吧,您可以使用:
double x = d - Math.floor(d);
请注意,由于二进制浮点的工作方式,因此不会给您精确的0.321562,因为原始值并不完全是4.321562。如果您真的对精确数字感兴趣,则应改用
BigDecimal
。     
        在不使用数学的情况下获得分数的另一种方法是强制转换为long。
double x = d - (long) d;
当您打印ѭ3时,toString将执行少量舍入操作,因此您不会看到任何舍入错误。但是,当您删除整数部分时,舍入不再足够,并且舍入错误变得明显。 解决方法是自己进行舍入或使用BigDecimal来控制舍入。
double d = 4.321562;
System.out.println(\"Double value from toString \" + d);
System.out.println(\"Exact representation \" + new BigDecimal(d));
double x = d - (long) d;
System.out.println(\"Fraction from toString \" + x);
System.out.println(\"Exact value of fraction \" + new BigDecimal(x));
System.out.printf(\"Rounded to 6 places %.6f%n\", x);
double x2 = Math.round(x * 1e9) / 1e9;
System.out.println(\"After rounding to 9 places toString \" + x2);
System.out.println(\"After rounding to 9 places, exact value \" + new BigDecimal(x2));
版画
Double value from toString 4.321562
Exact representation 4.321562000000000125510268844664096832275390625
Fraction from toString 0.3215620000000001
Exact value of fraction 0.321562000000000125510268844664096832275390625
Rounded to 6 places 0.321562
After rounding to 9 places toString 0.321562
After rounding to 9 places, exact value 0.32156200000000001448796638214844278991222381591796875
注意:
double
的精度有限,如果不使用适当的舍入,您会看到表示问题逐渐蔓延。在您使用
double
esp数字进行的任何计算中都可能发生这种情况,这些数字不是2的幂的精确和。     
        使用模:
double d = 3.123 % 1;
assertEquals(0.123, d,0.000001);
    

要回复问题请先登录注册