我想弄清楚什麼是解析十進制值的最佳方法。我目前使用Math.Round
,但似乎不適用於輸入數據。將十進制數截斷爲一個十進制數
我希望能夠得到整數部分,然後小數點後面的第一個數字。
var value = 25.987817685360218441503885773M;
return Math.Round(value, 1);
回報26
但我想返回25.9
。
我想弄清楚什麼是解析十進制值的最佳方法。我目前使用Math.Round
,但似乎不適用於輸入數據。將十進制數截斷爲一個十進制數
我希望能夠得到整數部分,然後小數點後面的第一個數字。
var value = 25.987817685360218441503885773M;
return Math.Round(value, 1);
回報26
但我想返回25.9
。
假設你想「回合」到25.9而不是26.9,你必須手動。
var number = 25.9877;
var rounded = Convert.ToDouble(Convert.ToInt32(number*10))/10;
而且,當然,這不是舍入,這只是斬斷小數。
@Robert - 如果這是公認的答案, 25.9',而不是'26.9',那麼請編輯您的帖子以反映這一點。 – mbeckish
人保持變化我的結果我的意思是25.9 – Robert
這輪到'26'? 'Convert.ToInt32'輪。 – flindeberg
您正舍入到小數點後第一位,但向上舍入爲25.98。這意味着8> = 5並且使得9變成0並且將1移到5.即5 + 1。因此,你越來越26.
你正在四捨五入,最後會明顯變圓。你想要做的是截斷數字。這裏,將完成一個方法,你想要什麼:
public decimal TruncateDecimal(decimal value, int precision)
{
decimal step = (decimal)Math.Pow(10, precision);
int tmp = (int)Math.Truncate(step * value);
return tmp/step;
}
由於有至少據我所知,這裏沒有任何可行的解決辦法,這是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);
}
請記住,雖然這不是舍入,但這是一些奇怪的截斷形式。
您確定要將'25.987817685360218441503885773M'舍入爲'26.9'嗎?這不是多麼圓潤的作品。 – ekad
你的意思是25.9嗎?另外,您預計25.887會有多少?基本上,你只是想截斷小數第一位後的數字,或者當四捨五入到下一個整數時是否需要特殊情況? –
文檔:http://msdn.microsoft.com/en-us/library/System.Math.Round(v=vs.110).aspx –