代码之家  ›  专栏  ›  技术社区  ›  Chris

javascript math.round和c math.round有多接近?

  •  7
  • Chris  · 技术社区  · 15 年前

    我从阅读中知道 this Stackoverflow question 编译器将查看您的数字,决定中点是偶数还是奇数,然后返回偶数。示例数字为2.5,四舍五入为3。我试过自己的小实验来看看会发生什么,但是我还没有找到任何关于这个的规范,或者即使它在浏览器之间是一致的。

    下面是一个使用jquery进行显示的javascript片段示例:

    $(document).ready(function() {
        $("#answer").html(showRounding());
    });
    
    function showRounding() {
        var answer = Math.round(2.5);
        return answer;
    }
    

    这将返回“3”。

    我想知道的是:javascript中的四舍五入与C等价物有多接近?我之所以这么做是因为我想使用一个 Math.Round 把同样的方法改写成C,我想知道我可以在舍入一个数字后得到同样的结果。

    2 回复  |  直到 10 年前
        1
  •  5
  •   Jeff Sternal    15 年前

    这里是 the complete javascript specification 对于 Math.round(x) 以下内容:

    15.8.2.15 round(x)返回最接近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,但是 math.round(_“3.5”)返回_“3。

    注2:Math.Round(x)的值为 与 数学楼层(x+0.5),除非x为“0” 或小于0但大于或 等于-0.5;对于这些情况 Math.Round(x)返回“0”,但是 math.floor(x+0.5)返回+0。

    The C# Language Specification 没有规定任何特定的舍入算法。我们最接近的是.NET的文档 Math.Round . 从中,您可以看到一些JavaScript案例不适用( 数学,圆 只处理小数和双精度数,而不是无穷大),方法的重载使您对结果有更大的控制权-您可以指定结果中的小数位数和中点舍入方法。默认情况下, 数学,圆 使用“银行四舍五入”(到偶数)。

        2
  •  3
  •   Crescent Fresh    15 年前

    ecmascript的舍入基本上是幼稚的。 asymmetric rounding (增加支票 +-Infinity )将您的javascript代码移植到C您可能最好避免.NET的 Math.Round (正如它一样) always symmetric 及使用 Math.Floor 而是:

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

    也就是说,如果你想严格模仿EcmaScript的 Math.round .