C# 将小数舍入到小数点后两位
我试图将十进制数四舍五入到小数点后两位,这非常有效。 我的工作如下:C# 将小数舍入到小数点后两位,c#,asp.net,vb.net,rounding,C#,Asp.net,Vb.net,Rounding,我试图将十进制数四舍五入到小数点后两位,这非常有效。 我的工作如下: Math.Round(Amount, 2) 因此,如果我的金额为40000.4567,我得到的正是我想要的40000.46。 现在的问题是我有一个像40000.0000这样的十进制数,当我对它进行四舍五入时,结果是40000,我真正想要的是40000.00。所以round总是忽略后面的零 为了解决这个问题,我可以选择将其转换为字符串并使用格式,但我不想这样做,因为这样做效率很低,我相信一定有办法做得更好 我也试过类似的东西
Math.Round(Amount, 2)
因此,如果我的金额为40000.4567
,我得到的正是我想要的40000.46
。
现在的问题是我有一个像40000.0000
这样的十进制数,当我对它进行四舍五入时,结果是40000
,我真正想要的是40000.00
。所以round总是忽略后面的零
为了解决这个问题,我可以选择将其转换为字符串并使用格式,但我不想这样做,因为这样做效率很低,我相信一定有办法做得更好
我也试过类似的东西
Decimal.Round(Amount, 2)
现在,一种方法是检查数字是否包含小数部分的任何内容,并相应地使用舍入函数,但这是一种非常糟糕的方法。
我也不能使用truncate,因为这显然与数量有关
方法是什么?它是正确的四舍五入,但您无法理解该值不是格式。这两个值,40000
和40000.00
之间没有差异,类似于3.1
的问题也会出现
只需使用格式设置即可将任何数字输出到小数点后两位,例如:
Console.WriteLine(String.Format("{0:0.00}", value));
或:
您混合了两件事-舍入和输出格式。要以所需格式输出数字,可以使用函数
string.format
和所需格式,例如:
decimal number = 1234.567m;
string.Format("{0:#.00}", number);
你可以阅读更多关于的信息。我想你想要的是显示两个小数,即使它们是零。您可以使用string.Format(我还将其与Round结合使用):
对于舍入十进制数,可以使用
decimal number=200.5555m;
number= Math.Round(number, 2);
string numString= string.Format("{0:0.00}", number);
4000和4000.00之间有什么区别?这些是相同的小数-您想要的是字符串格式如果您想要字符串结果,一个硬代码,在舍入后,转换为int如果转换为int值和舍入值与add to end相同,则为“00”。从客户端的角度来看,我无法显示一些数字,例如40000,一些数字将被舍入为45666.23,这在表示层似乎不一致。我可以通过字符串格式来实现,但是为什么要使用这种开销呢?难道没有一种方法可以使用数学函数来实现吗@Jamaxack我不需要字符串结果,但如果我做不到,我必须首先将其转换为字符串,格式化,然后再转换回来,这似乎是非常糟糕的方法,我知道值不是格式,这就是为什么我说,如果小数部分中不包含任何内容,而不使用字符串,那么是否有一种方法可以对小数进行四舍五入,并在小数后保留可选的2个尾随零format@ubaid,没有,因为值/格式的二分法。@ubaid,没有,这真的不是一件坏事。当然,另一种选择是没有格式化的数字,这可能会更糟。@ubaid,如果您要向客户端显示数字,那么您还是要将其转换为字符串。如果不显示它,则不需要对其进行格式化。@paxdiablo,值得一提的是,您不必使用
string.format
:value.ToString(“0.00”)
也有效。您可能需要添加一些详细信息,说明仅使用string.Format
和将其与Math.Round
组合使用之间的区别,即string.Format
的0
说明符将使用,而Math.Round
的默认舍入为。
Console.WriteLine(string.Format("{0:0.00}", Math.Round(Amount, 2));
decimal number=200.5555m;
number= Math.Round(number, 2);
string numString= string.Format("{0:0.00}", number);