Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将小数舍入到小数点后两位_C#_Asp.net_Vb.net_Rounding - Fatal编程技术网

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);