在工作中我發現了一個C#浮點數的精度問題,以下的程序運行結果並未得到我預期的結果:
view source print?01
namespace
FloatTest
02
{
03
class
Program
04
{
05
static
void
Main(
string
[] args)
06
{
07
double
a = 0.0001;
08
float
b = 0.1F;
09
10
int
c = (
int
)((a * 1000) / b);
11
12
Console.WriteLine(
"c = {0}"
, c);
13
14
Console.ReadLine();
15
}
16
}
17
}
我期望的結果是得到1,結果程序返回的結果為c = 0
這讓我想到了可能是因為浮點數采用IEEE754的表示方法,在運算中b會轉換成double,可能是在轉換中算法的問題導致精度丟失,為了證實該問題,我做了下面的實驗:
view source