2011-03-08 45 views
1

在.NET中,當我從1.35072減去1.35時,顯示.000719999999。如何在使用double時獲得.00072?.NET使用雙打時的麻煩

TOTKILO.Text = KILO.Text * TOUCH.Text * 0.01; //here 1.35072 
TextBox10.Text = TextBox9.Text * TextBox8.Text * 0.01; //here 1.35 
K = Val(TOTKILO.Text) - Val(TextBox10.Text); //here it shows 0.00719999 
+2

你提的問題是非常不清楚 - 請你可以嘗試和編輯您的問題,使其更易於理解什麼是你正在嘗試做的,你有什麼用的問題。 – Justin 2011-03-08 04:12:51

+0

噢,上帝,我的眼睛:( – 2011-03-08 04:16:05

+8

@eldarerathis你應該得到一枚獎牌或什麼! – Justin 2011-03-08 04:34:37

回答

5

取決於你真正要求的。

如果要舍入到小數點後五位,你可以這樣做:

double x = 1.35072; 
double y = 1.35; 
double z = Math.Round(x - y, 5); // 0.00072 

如果,另一方面,你的目標是要始終從加/減十進制數得到精確的結果,使用decimal類型,而不是double,因爲它本質上是一個鹼-10型(相對於鹼-2型),因此可以表示在小數形式精確地表示編號。

decimal x = 1.35072M; 
decimal y = 1.35M; 
decimal z = x - y; // 0.00072M 
0

從我所看到的,你幾乎從不需要double。幾乎所有的時間一個decimalSystem.Decimal)適用於你需要的,它是一個確切的數字,而不是一個浮點表示,所以你永遠不會有這些舍入問題。

+0

從來沒有四捨五入問題,所以'1M!? - (1M/3M)'會給我一個確切的結果嗎?(只是給你一個難的時間;)) – 2011-03-08 04:38:04