本文主要是介绍【Java-解决精度丢失】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
浮点数为什么会精度丢失?
我们在程序中所写的值都是使用十进制的形式,但是计算机使用的是二进制。当计算机进行运算时会将十进制转换为二进制,再进行运算。
而浮点数的小数位在转换二进制时可能产生无序循环的情况,这时计算机会取近似值就造成了精度丢失。
如何解决?
当使用场景对精度要求高时,可以使用BigDecimal来解决浮点数精度丢失问题。
例子运用理解:
public static void main(String[] args) {// 解决浮点数精度丢失(小数位数在计算时可能产生循环)BigDecimal dec1 = new BigDecimal("0.2");BigDecimal dec2 = new BigDecimal("0.1");System.out.printf("%f+%f=%f\n", dec1, dec2, dec1.add(dec2));System.out.printf("%f-%f=%f\n", dec1, dec2, dec1.subtract(dec2));System.out.printf("%fx%f=%f\n", dec1, dec2, dec1.multiply(dec2));// 除法除不尽,需要选择保留形式System.out.printf("%f÷%f=%f\n", dec1, dec2, dec1.divide(dec2, 10, RoundingMode.CEILING));// 除数+取余BigDecimal[] ret = dec1.divideAndRemainder(dec2);System.out.println("商:" + ret[0]);System.out.println("余数:" + ret[1]);}
这篇关于【Java-解决精度丢失】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!