2014-01-24 108 views
-4

我想弄清楚什麼是解析十進制值的最佳方法。我目前使用Math.Round,但似乎不適用於輸入數據。將十進制數截斷爲一個十進制數

我希望能夠得到整數部分,然後小數點後面的第一個數字。

var value = 25.987817685360218441503885773M; 
return Math.Round(value, 1); 

回報26但我想返回25.9

+7

您確定要將'25.987817685360218441503885773M'舍入爲'26.9'嗎?這不是多麼圓潤的作品。 – ekad

+4

你的意思是25.9嗎?另外,您預計25.887會有多少?基本上,你只是想截斷小數第一位後的數字,或者當四捨五入到下一個整數時是否需要特殊情況? –

+2

文檔:http://msdn.microsoft.com/en-us/library/System.Math.Round(v=vs.110).aspx –

回答

3

假設你想「回合」到25.9而不是26.9,你必須手動。

var number = 25.9877; 
var rounded = Convert.ToDouble(Convert.ToInt32(number*10))/10; 

而且,當然,這不是舍入,這只是斬斷小數。

+1

@Robert - 如果這是公認的答案, 25.9',而不是'26.9',那麼請編輯您的帖子以反映這一點。 – mbeckish

+0

人保持變化我的結果我的意思是25.9 – Robert

+0

這輪到'26'? 'Convert.ToInt32'輪。 – flindeberg

0

您正舍入到小數點後第一位,但向上舍入爲25.98。這意味着8> = 5並且使得9變成0並且將1移到5.即5 + 1。因此,你越來越26.

1

你正在四捨五入,最後會明顯變圓。你想要做的是截斷數字。這裏,將完成一個方法,你想要什麼:

public decimal TruncateDecimal(decimal value, int precision) 
{ 
    decimal step = (decimal)Math.Pow(10, precision); 
    int tmp = (int)Math.Truncate(step * value); 
    return tmp/step; 
} 
2

編輯:

Math.Round有出過載:

System.Math.Round (n, 2, MidpointRounding.ToEven); 

Math.Round Method

0

由於有至少據我所知,這裏沒有任何可行的解決辦法,這是OP所需要的。

// .NET has no build in power function for decimals 
decimal Pow(decimal value, int exp) 
{ 
if (exp < 0) 
    return 1/Pow(value, -exp); 

if (exp == 0) 
    return 1; 
else if (exp % 2 == 0) 
    return Pow(value * value, exp/2); 
else return 
    value * Pow(value, exp - 1); 
} 
// Rounds a number to decimals decimals, ie 1 => 1 decimal, -2 => whole hundreds 
public decimal Truncate(decimal number, int decimals) 
{ 
var factor = 1/Pow(10, decimals); 
return number - (number % factor); 
} 

請記住,雖然這不是舍入,但這是一些奇怪的截斷形式。

相關問題