4 回答

TA貢獻1779條經驗 獲得超6個贊
您正在使用int / int,即使您要分配給十進制/雙精度/浮點型變量,它也會以整數算術執行所有操作。
強制其中一個操作數為您要用于算術的類型。
for (int i = 0; i <= 100; i++)
{
decimal result = i / 100m;
long result2 = i / 100;
double result3 = i / 100d;
float result4 = i / 100f;
Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})",
i, 100, i / 100d, result, result2, result3, result4);
}
結果:
0/100=0 (0,0,0, 0)
1/100=0.01 (0.01,0,0.01, 0.01)
2/100=0.02 (0.02,0,0.02, 0.02)
3/100=0.03 (0.03,0,0.03, 0.03)
4/100=0.04 (0.04,0,0.04, 0.04)
5/100=0.05 (0.05,0,0.05, 0.05)
(等等)
請注意,這并沒有顯示由float或double表示的確切值-例如,您不能將0.01精確地表示為float或double。字符串格式有效地舍入了結果。見我在.NET上的文章浮動小數點的更多信息,以及為一類,這將讓你看到確切的雙重價值。
我沒有result2因為使用100L而煩惱,因為結果總是一樣的。

TA貢獻1852條經驗 獲得超1個贊
您需要強制執行浮點運算“ double / double”而不是“ int / int”
double result = (double)297 / (double)315 ;
添加回答
舉報