我试图找出解析小数值的最佳方法。我目前正在使用Math.Round
,但这似乎不适用于输入数据。
我希望能够得到整数部分,然后是小数点后的第一个数字。
var value = 25.987817685360218441503885773M;
return Math.Round(value, 1);
返回26
,但我想返回25.9
。
答案 0 :(得分:3)
假设您要将其“舍入”到25.9而不是26.9,则必须手动执行。
var number = 25.9877;
var rounded = Convert.ToDouble(Convert.ToInt32(number*10))/10;
当然,这不是四舍五入,这只是截断小数。
答案 1 :(得分:2)
答案 2 :(得分: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;
}
答案 3 :(得分:0)
你正在四舍五入到第一个小数,但是25.98轮。这意味着8>≥5并且使9变为0并且将1带到5.即5 + 1。因此你得到26岁。
答案 4 :(得分: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);
}
请记住,虽然这不是四舍五入,但这是一种奇怪的截断形式。