假设我的值是3.4679,想要3.46.我如何才能在不四舍五入的情况下截断到小数点后两位?
我尝试了以下方法,但这三个方法都给了我3.47:
void Main()
{
Console.Write(Math.Round(3.4679, 2,MidpointRounding.ToEven));
Console.Write(Math.Round(3.4679, 2,MidpointRounding.AwayFromZero));
Console.Write(Math.Round(3.4679, 2));
}
这将返回3.46,但只是看起来有点脏:
void Main()
{
Console.Write(Math.Round(3.46799999999 -.005 , 2));
}
发布于 2010-06-30 02:36:32
value = Math.Truncate(100 * value) / 100;
注意,像这样的分数不能用浮点数精确表示。
发布于 2012-04-10 04:46:20
对于在C#中截断小数的实际用法,拥有一个完整的函数会更有用。如果您愿意,可以非常容易地将其转换为Decimal扩展方法:
public decimal TruncateDecimal(decimal value, int precision)
{
decimal step = (decimal)Math.Pow(10, precision);
decimal tmp = Math.Truncate(step * value);
return tmp / step;
}
如果你需要VB.NET,试试这个:
Function TruncateDecimal(value As Decimal, precision As Integer) As Decimal
Dim stepper As Decimal = Math.Pow(10, precision)
Dim tmp As Decimal = Math.Truncate(stepper * value)
Return tmp / stepper
End Function
然后像这样使用它:
decimal result = TruncateDecimal(0.275, 2);
或
Dim result As Decimal = TruncateDecimal(0.275, 2)
发布于 2017-04-27 00:37:07
一种通用快速的System.Decimal
方法(无需Math.Pow()
/乘法)
decimal Truncate(decimal d, byte decimals)
{
decimal r = Math.Round(d, decimals);
if (d > 0 && r > d)
{
return r - new decimal(1, 0, 0, false, decimals);
}
else if (d < 0 && r < d)
{
return r + new decimal(1, 0, 0, false, decimals);
}
return r;
}
https://stackoverflow.com/questions/3143657
复制相似问题