C# 小数点后舍入

C# 小数点后舍入,c#,math,rounding,C#,Math,Rounding,C中是否存在Java RoundingMode.HALF_DOWN的等价物 例如,我想从1.265到1.26,从1.266到1.27 如果没有,有简单的方法吗?使用带有以下构造函数重载的.Round方法: public static double Round (double value, int digits, MidpointRounding mode); 这样称呼: Math.Round(value, 2, MidpointRounding.AwayFromZero); .使用具有以下构

C中是否存在Java RoundingMode.HALF_DOWN的等价物

例如,我想从1.265到1.26,从1.266到1.27

如果没有,有简单的方法吗?

使用带有以下构造函数重载的.Round方法:

public static double Round (double value, int digits, MidpointRounding mode);
这样称呼:

Math.Round(value, 2, MidpointRounding.AwayFromZero);
.

使用具有以下构造函数重载的.Round方法:

public static double Round (double value, int digits, MidpointRounding mode);
这样称呼:

Math.Round(value, 2, MidpointRounding.AwayFromZero);
.

看一看,例如

结果:

  1.265 -> 1.26
  1.266 -> 1.27
看一看

结果:

  1.265 -> 1.26
  1.266 -> 1.27
你可以用数学

你可以用数学


@凯尼尔森:我没有投票,但一个可能的原因是因为这个问题是不可能的。1.265可以用十进制文字1.265m精确地用C表示,但1.265是一个二进制浮点文字,其值为1.2649998569488525390625,因此将正好位于两个目标之间的值四舍五入的问题不适用。@EricPostChil感谢您的评论。有些事我不知道。你知道我怎样才能避开这个问题吗?@KBell:你得多描述一下整个问题。如果您正在从文本中读取十进制数字并希望对其进行四舍五入,请使用十进制或字符文本,而不是双精度文本。如果您使用的是double,那么您使用的是基于二进制的浮点,并且在算术中可能有各种各样的舍入错误,因此您通常根本不会期望精确的十进制结果。是的,但这仍然不是否决这个问题的理由。我会说:-@kaynlson:我没有投票,但是一个可能的原因是因为这个问题是不可能的。1.265可以用十进制文字1.265m精确地用C表示,但1.265是一个二进制浮点文字,其值为1.2649998569488525390625,因此将正好位于两个目标之间的值四舍五入的问题不适用。@EricPostChil感谢您的评论。有些事我不知道。你知道我怎样才能避开这个问题吗?@KBell:你得多描述一下整个问题。如果您正在从文本中读取十进制数字并希望对其进行四舍五入,请使用十进制或字符文本,而不是双精度文本。如果您使用的是double,那么您使用的是基于二进制的浮点,并且在算术中可能存在各种舍入错误,因此您通常根本不会期望精确的十进制结果。是的,但这仍然不是对我要说的问题投否决票的理由:-double literal 1.265没有值1.265;它是1.2649998569488525390625。因此,这段代码不能证明它执行了所需的功能。不可能在不损失精度的情况下表示1.265:1.265.ToString。唉,1/10是二进制的周期分数,这就是为什么1.265==1+265/1000不能精确表示的原因是,这是不可能的。这就是为什么这个答案中的数字不能证明舍入是否按期望的精确中点。您可以改为使用可能的数字,如1.375或1.625;它是1.2649998569488525390625。因此,这段代码不能证明它执行了所需的功能。不可能在不损失精度的情况下表示1.265:1.265.ToString。唉,1/10是二进制的周期分数,这就是为什么1.265==1+265/1000不能精确表示的原因是,这是不可能的。这就是为什么这个答案中的数字不能证明舍入是否按期望的精确中点。您可以使用可能的数字,如1.375或1.625。