2009-11-09 127 views
2

我使用十進制類型(.net),我想看看兩個數字是否相等。但我只想精確到小數點後10位。例如,拿這三個數字。我希望他們都是平等的。如何比較兩位小數到小數點後10位?

0.1123456789 
0.11234567891 
0.11234567899 

的10進制數限制是從我的數據庫來了,所以我必須假設,第一個數字已經四捨五入,因此,我不能簡單地圓別人,因爲最後一個會總結。

我真的只想截斷到10位小數,但看不到如何做到這一點。

回答

5

乘以10^10並刪除小數部分怎麼樣?

decimal x2 = Math.Truncate(x * 10000000000); 
decimal y2 = Math.Truncate(y * 10000000000); 
Assert.Equals(x2, y2); 

編輯:由Aaron的建議更改爲Math.Truncate。謝謝。

+1

當然這也將是錯誤的,大於2^31/10000000000. – Aaron 2009-11-09 15:01:31

+0

@Aaron任何價值的,當然。 – 2009-11-09 15:04:03

+0

將其更改爲Math.Truncate()而不是轉換爲int - 您仍然會失去一點頂端精度,但它會更「接近」。 – Aaron 2009-11-09 15:07:33

1

乘以10000000000,轉換爲int,然後除以相同的數字。

這樣你截斷了多餘的數字。

您可能需要添加.5 * 10^-11才能在截斷前正確舍入。

-2

或許這對你的作品:

If Decimal.Round(yourDec1, 10, MidpointRounding.AwayFromZero) = Decimal.Round(yourDec2, 10, MidpointRounding.AwayFromZero) Then 

鮑比

+4

四捨五入!=截斷。 – 2009-11-09 14:55:41

10

你比較浮點數以同樣的方式。下面是一些僞代碼,因爲我不知道在.NET呼籲絕對值,但它基本上將看起來像這樣(修改常數所需要的精確度):

if(Math.Abs(value1 - value2) < 0.0000000001) 
{ 
    // blah blah 
} 
+1

return(Math.Abs​​(value1 - value2)<= precision); – 2009-11-09 15:06:29

+1

@Russel,固定使用'Math.Abs​​'。 – 2009-11-09 15:13:02

+0

感謝您的協助。 :D – 2009-11-09 15:36:27

相關問題