早知道在java中,浮点运算会出现不精确的情况。解决方案是BigDecimal类。今天发现个问题:
System.out.println(2-1.1);//0.8999999999999999
System.out.println(2.0-0.9);//1.1
只要没有整数位的都会出现问题?Why?
その理由は、浮動小数点数が指数と仮数の 2 つの部分で構成されているためです。浮動小数点数が 2 進数に変換されて計算に参加すると、変換プロセスは予測不能かつ不可逆的になります。あなたが言及した 2 番目のケース。たまたま、変換プロセス中に精度の損失が見つからなかっただけです
この問題は Java に限定されず、他の言語でもこの問題が発生する可能性があります。
その理由は、浮動小数点数が指数と仮数の 2 つの部分で構成されているためです。浮動小数点数が 2 進数に変換されて計算に参加すると、変換プロセスは予測不能かつ不可逆的になります。
あなたが言及した 2 番目のケース。たまたま、変換プロセス中に精度の損失が見つからなかっただけです
この問題は Java に限定されず、他の言語でもこの問題が発生する可能性があります。