C# 如何将小数点四舍五入?
给定一个小数“96.154”,我如何确保它总是四舍五入到96.16(而不是通常四舍五入到2个小数,即96.15)。有点老套,但这是一种非常直观的方法: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
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
,这是不正确的,因为它应该是stat96.15
。这并不像您所说的那样理想,但看起来是最好的解决方案