Javascript的Math.Round和C#Math.Round有多接近?

Javascript的Math.Round和C#Math.Round有多接近?,javascript,c#,rounding,Javascript,C#,Rounding,我从阅读中了解到,编译器将查看您的数字,确定中点是偶数还是奇数,然后返回偶数。示例编号为2.5,四舍五入为3。我已经尝试了我自己的小实验来看看会发生什么,但我还没有找到任何关于这方面的规范,甚至没有找到浏览器之间是否一致的规范 下面是一个使用jQuery显示的JavaScript片段示例: $(document).ready(function() { $("#answer").html(showRounding()); }); function showRounding() {

我从阅读中了解到,编译器将查看您的数字,确定中点是偶数还是奇数,然后返回偶数。示例编号为2.5,四舍五入为3。我已经尝试了我自己的小实验来看看会发生什么,但我还没有找到任何关于这方面的规范,甚至没有找到浏览器之间是否一致的规范

下面是一个使用jQuery显示的JavaScript片段示例:

$(document).ready(function() {
    $("#answer").html(showRounding());
});

function showRounding() {
    var answer = Math.round(2.5);
    return answer;
}
这将返回一个“3”

我想知道的是:JavaScript中的四舍五入与C#等价物有多接近?我之所以这样做是因为我想使用一个JavaScript方法,它使用
Math.Round
并将相同的方法重写为C#,并且想知道在对一个数字进行舍入后,我能够得到相同的结果。

这里是关于
Math.Round(x)

15.8.2.15四舍五入(x)返回最接近x的数值,并且 等于一个数学整数。如果 两个整数值相等 接近x,则结果为 接近的数值+∞. 如果 x已经是一个整数,结果是 十,

  • 如果x为NaN,则结果为NaN
  • 如果x为+0,则结果为+0
  • 如果x是−0,结果是−0
  • 如果x是+∞, 结果是+∞.
  • 如果x是−∞, 结果是−∞.
  • 如果x大于0但小于 0.5,结果为+0
  • 如果x小于0但大于或等于-0.5,则结果 是−0
注1:Math.round(3.5)返回4,但 数学四舍五入(–3.5)返回–3

注2:Math.round(x)的值为 与的值相同 数学地板(x+0.5),x为−0 或小于0但大于或 等于-0.5;对于这些情况 数学四舍五入(x)返回−0,但是 floor(x+0.5)返回+0


没有规定任何特定的舍入算法。我们拥有的最接近的东西是.NET的文档。从这一点上,您可以看到一些javascript案例不适用(
Math.Round
只处理小数和双精度,而不是无穷大),该方法的重载让您对结果有了更多的控制—您可以指定结果中的小数位数和中点舍入方法。默认情况下,
Math.Round
使用“银行家舍入”(到偶数)。

ECMAScript的舍入基本上是幼稚的(添加了对
+-Infinity
的检查)。将JavaScript代码移植到C#您可能最好避免.NET的
Math.Round
(按原样),而是使用
Math.Floor

double d = -3.5d;
double rounded = Math.Floor(d + 0.5); // -3 matches JavaScript's Math.round

也就是说,如果您想要严格模拟ECMAScript的
Math.round

,您是对的。请再看一看C#,您应该使用Round with middpointrounding.AwayFromZero使您的业务分析师和簿记员感到高兴。看起来,默认情况下,C#Round是使用银行家四舍五入和中点四舍五入。当然,在C#中,使用十进制表示货币。虽然不确定这在Javascript中有多准确,但无论如何你不应该依赖Javascript——服务器是权威。