1. 程式人生 > >Java中浮點數相減造成損失的簡單解決方法

Java中浮點數相減造成損失的簡單解決方法

今天遇到個問題:double m1 = 0.09    m1 = m1 - 0.05    結果m1卻不是0.04而是0.039999999999999994!

查資料說是java遵循IEEE754浮點數的運算規範,使用分數與指數表示浮點數

如:0.5使用1/2表示,0.75會使用1/2+1/4+1/8;而0.1會用1/16+1/32+1/256+1/512+1/4096+1/8192+......表示;

解決方法:

很簡單,強制轉換成整型再輸出就得了。。

所以

//得出的m1值為0.039999999999999994
double m1 = 0.09;
double x = 0.05;
m1 = m1 -x;

改正為:

//得出的m1值為0.04
double m1 = 0.09;
double x = 0.05;
m1 = ((double)((int)(m1*100) - (int)(x*100)))/100;