C# 如何将小数点四舍五入?

C# 如何将小数点四舍五入?,c#,.net,rounding,C#,.net,Rounding,给定一个小数“96.154”,我如何确保它总是四舍五入到96.16(而不是通常四舍五入到2个小数,即96.15)。有点老套,但这是一种非常直观的方法: var val = 96.154M; var result = Math.Ceiling(val * 100) / 100.0M; 我认为你在寻找方法 您可以将其与乘数结合使用,以指定要舍入的小数位数。像这样, public float roundUp(float number, int numDecimalPlaces) { dou

给定一个小数“96.154”,我如何确保它总是四舍五入到96.16(而不是通常四舍五入到2个小数,即96.15)。

有点老套,但这是一种非常直观的方法:

var val = 96.154M;

var result = Math.Ceiling(val * 100) / 100.0M;

我认为你在寻找方法

您可以将其与乘数结合使用,以指定要舍入的小数位数。像这样,

public float roundUp(float number, int numDecimalPlaces)
{
    double multiplier = Math.Pow(10, numDecimalPlaces))

    return Math.ceiling(number*multiplier) / multiplier;
}

您可以向该值添加0.005,然后对结果进行四舍五入。

以下是值和基分数的四舍五入方法代码。你的问题应该使用的基本分数是0.05米。但是,该方法可用于其他常见情况,即基准分数为0.5M;你可以用一些有趣的方法来应用它,比如用0.3M的基分数。我希望它能回答你的问题,玩得开心:

static decimal roundUp(decimal aValue, decimal aBaseFraction)
{
   decimal quotient = aValue / aBaseFraction;
   decimal roundedQuotient = Math.Round(quotient, 0);
   decimal roundAdjust = 0.0M;
   if (quotient > roundedQuotient)
   {
      roundAdjust = aBaseFraction;
   }
   return roundAdjust + roundedQuotient * aBaseFraction;
}

这是我的一个汇总方法的版本,在这个can特定的十进制中

void Main()
{
    Console.WriteLine(RoundUp(2.8448M, 2));
    //RoundUp(2.8448M, 2).Dump();
}

public static decimal RoundUp(decimal numero, int numDecimales)
{
    decimal valorbase = Convert.ToDecimal(Math.Pow(10, numDecimales));
    decimal resultado = Decimal.Round(numero * 1.00000000M, numDecimales + 1, MidpointRounding.AwayFromZero) * valorbase;
    decimal valorResiduo = 10M * (resultado - Decimal.Truncate(resultado));

    if (valorResiduo < 5)
    {
        return Decimal.Round(numero * 1.00M, numDecimales, MidpointRounding.AwayFromZero);
    }
    else
    {
        var ajuste = Convert.ToDecimal(Math.Pow(10, -(numDecimales + 1)));
        numero += ajuste;
        return Decimal.Round(numero * 1.00000000M, numDecimales, MidpointRounding.AwayFromZero);
    }
}
void Main()
{
控制台写入线(综述(2.8448M,2));
//综述(2.8448M,2.Dump();
}
公共静态十进制汇总(十进制数字,整数)
{
十进制值=Convert.ToDecimal(Math.Pow(10,numDecimales));
decimal resultado=十进制.Round(numero*1.00000000M,numDecimales+1,中点舍入.AwayFromZero)*valorbase;
十进制valorresido=10M*(resultado-decimal.Truncate(resultado));
如果(Valorresido<5)
{
返回小数点舍入(numero*1.00M,numDecimales,中点舍入。远离零);
}
其他的
{
var ajuste=Convert.ToDecimal(数学功率(10,-(numDecimales+1));
numero+=ajuste;
返回小数点舍入(numero*1.00000000M,numDecimales,中点舍入。远离零);
}
}

96.154如何向上取整到96.16,而不是向下取整到96.15?详细说明四舍五入的工作原理是很好的。请检查此链接这是实际的十进制类型,还是双精度类型?您关心负数吗?它们是否也应该向上取整(接近零)?天才,但是,这取决于你是否总是想从零开始取整,那么消极因素呢?@Jodrell问题的标题是“始终向上”。顺便说一句,我对有关负数的评论投了更高的票。当值为
96.150
时,这将不起作用,因为这会将其四舍五入为
96.16
,这是不正确的,因为它应该是stat
96.15
。这并不像您所说的那样理想,但看起来是最好的解决方案