将十进制数截断为一个十进制数

时间:2014-01-24 14:11:20

标签: c#

我试图找出解析小数值的最佳方法。我目前正在使用Math.Round,但这似乎不适用于输入数据。

我希望能够得到整数部分,然后是小数点后的第一个数字。

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

返回26,但我想返回25.9

5 个答案:

答案 0 :(得分:3)

假设您要将其“舍入”到25.9而不是26.9,则必须手动执行。

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

当然,这不是四舍五入,这只是截断小数。

答案 1 :(得分:2)

编辑:

Math.Round有一个重载:

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

请参阅Math.Round Method

答案 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);
}

请记住,虽然这不是四舍五入,但这是一种奇怪的截断形式。