2012-01-20 68 views
0

我想截斷小數部分。如何截斷小數部分?

我的意思是創造出這樣做的功能。

1/9〜0.11111111111111

所以,如果想要挑選5位小數的功能設定,必須返回0.11111

我用字符串這樣做,但我猜是不是一個好主意。使用數學運算有可能做到這一點嗎?

回答

5

您可以使用

Math.Truncate 

http://msdn.microsoft.com/en-us/library/7d101hyf.aspx

編輯:我的一個合適的方法的版本(雖然加里已經共享下面一個)

public static double Truncate(double number, int digits) 
    { 
     double conversionFactor = (Math.Pow(10.0, digits)); 
     return Math.Truncate(number * conversionFactor)/conversionFactor; 
    } 
+0

有此編輯之間的怪異相似小時前和答案發表於4個小時前... –

+0

@加里 - 增值業務:我已經回答得更早(我是第一個回答,它現在說5小時前)。我沒有提供代碼示例,所以我認爲我應該。發佈時,我看到你已經添加了一個(在我的編輯中,我甚至提到你已經分享了一個例子)。在那之前我沒有見過你。這是否違反網站規則? – NoviceProgrammer

+1

體貼的反應是,如果你認爲別人的答案是有價值的,你會給予好評它,而不是複製他們的代碼到你自己的答案和不斷變化的變量名。 –

1

由於Math.Truncate()不允許指定要保留的位數,您必須首先乘以10^d,截斷併除以10^d agai n,其中d是要保留的小數位數。

2

要通過nDecimals截斷給定value的小數部分,只需使用:

value = Math.Truncate(value * Math.Pow(10, nDecimals))/Math.Pow(10, nDecimals); 

所以如果value = 1/9nDecimals = 5,它返回0.11111

+1

這個人計算兩次中間結果... –

0

我不知道,尤其是因爲我的天堂」牛逼觸及C#一段時間,但我認爲可以使用Math.Round?有點像它使用的方式here

所以,也許嘗試Math.Round(0.111111111, 6);

1

可以使用的方法一樣......

private double TruncateAt(double number, double decimals) 
    { 
     double factor = Math.Pow(10, decimals); 
     return Math.Truncate(number*factor)/factor; 
    } 

並調用由

double x = TruncateAt(1.0/9.0, 5); 

的方法。如果你的程序使用相同的因素一致,你可能會使其成爲一個常量和獲得性能的提高...