有小数位数,如果存在,则希望将其修剪为2个小数位数

10

有小数,如果存在则要将其舍入到2位小数


你是想要“截去多余的小数”还是像Jon所说的那样四舍五入? - Steve Danner
1
截取还是四舍五入?截取请参见:https://dev59.com/DnRC5IYBdhLWcg3wVvjL - SwDevMan81
5个回答

23

你尝试过使用 value = Decimal.Round(value, 2) 吗?

例如:

using System;

class Test
{    
    static void Main()
    {
        decimal d = 1234.5678m;
        Console.WriteLine("Before: {0}", d); // Prints 1234.5678
        d = decimal.Round(d, 2);
        Console.WriteLine("After: {0}", d); // Prints 1234.57
    }
}
请注意,这是四舍五入而不是简单地删除(因此在这里它是向上舍入)......您需要什么? Decimal 结构可能支持您需要做的任何操作。请查阅 MSDN 获取更多选项。

Math.Round可以进行银行家舍入。http://msdn.microsoft.com/zh-cn/library/ms131275.aspx - Hamish Grubijan

12
decimal.Truncate(myDecimal * 100) / 100

这会截断第一个小数点后面的所有内容。有关四舍五入,请参阅Jon的答案。


1
我使用以下代码: Math.Round(MyDecimalValue,2);

1

如果只是用于显示目的,您可以使用:

Console.Out.WriteLine("Number is: {0:F2}", myDecimalNumber);

0

这应该可以运行(编辑:已修复以去除四舍五入):

((Int32)(value * Math.Pow(10, decimalPlaces))) / (Math.Pow(10D, decimalPlaces));

2
在C#中,^表示异或。另外,如果有人使用decimal,很可能这是一个有意的选择,他们可能不希望使用其他类型(即使是你的示例在任何情况下也是错误的)。 - Joey
对不起,应该是 math.exp()。否则有什么问题吗? - Chris Shain
在C#中,“Int”不是一种类型,而且您之后进行的是整数除法,因此不会留下任何小数位。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接