C# Math.Round vs.String.Format
我需要将双精度值四舍五入到2位数。 什么更可取C# Math.Round vs.String.Format,c#,C#,我需要将双精度值四舍五入到2位数。 什么更可取 String.Format("{0:0.00}", 123.4567); // "123.46" Math.Round(123.4567, 2) // "123.46" 前者输出字符串,后者输出双精度。你对结果有什么用?这个问题的答案将给出您问题的答案。它们是不同的函数,如果您需要显示输出,请使用第一个(这也会强制显示小数)。如果变量的类型为double,则可以避免不可避免的.ToString()开销
String.Format("{0:0.00}", 123.4567); // "123.46"
Math.Round(123.4567, 2) // "123.46"
前者输出字符串,后者输出双精度。你对结果有什么用?这个问题的答案将给出您问题的答案。它们是不同的函数,如果您需要显示输出,请使用第一个(这也会强制显示小数)。如果变量的类型为double,则可以避免不可避免的.ToString()开销
请注意,第二个值对数字进行四舍五入,但如果是整数结果,则只会得到整数(即:7 vs 7.00),这取决于您想对其执行什么操作
String.Format
将返回一个字符串,Math.Round(double)
将返回一个double 如果希望以字符串的形式返回此值,则字符串.Format
更好,如果希望以双精度的形式返回此值,则数学.Round
更好。这完全取决于你的要求。数学。数字大于0的四舍五入(双位数)
在概念上是非常不干净的。但我认为它永远不应该被使用double
是一个二进制浮点数,因此没有定义好的十进制数字概念
我建议使用string.Format
,或仅当您仅需要为十进制显示目的进行四舍五入时使用ToString(“0.00”)
,如果您需要对实际数字进行四舍五入(例如,在进一步计算中使用它),则使用decimal.round
注意:使用decimal.Round
可以指定模式。通常希望从零开始
四舍五入,而不是四舍五入
使用ToEven
四舍五入0.005m
四舍五入为0.00
,0.015
四舍五入为0.02
。这不是大多数人所期望的
比较:
- ToEven:3.75轮到3.8轮
- ToEven:3.85轮到3.8轮(这不是大多数人所期望的)
- 从零开始:3.75轮到3.8轮
- 从零开始:3.85轮到3.9轮
有关详细信息,请参阅:数学。如果没有小数点,则舍入将不会添加任何小数点<代码>字符串。格式将更改。
e、 g.:Math.Round(2)
返回2;
String.Format(“{0:0.00}”,2)
返回2.00他们不需要是相同的,所以你可能更喜欢<代码>数学。循环< /代码>并使用它的舍入选项,也可以在你把货币存储为一倍的可能性的情况下检查这一点,你应该真正考虑使用十进制。代码>数学。数字>0的四舍五入(双位数)
在概念上是非常不干净的。我认为它永远不应该被使用double
是一个二进制浮点数,因此没有明确定义的十进制数字概念。如果需要将一个数字四舍五入到一定数量的小数位数,请使用decimal
,而不是Double
。请注意,第一个使用“远离零”四舍五入,第二个使用“到偶数”。第二种方法是通过重载指定舍入的类型,但默认情况下是“到偶数”…如果我不是“大多数人”,该怎么办?我可能错了,但我相信@CodesInChaos并不是说人们从不期望。5的舍入,他们只是期望它始终舍入(也就是说,如果3.75四舍五入,那么3.85的行为应该是类似的。@安德烈只需将中点四舍五入
保留为ToEven
?我不确定我是否明白你的意思。@Ruben9922,我的观点是,当你坚持使用字符串或字符串.Format时,你没有这个选项,它将总是四舍五入,就像“大多数人期望的那样”。