代码之家  ›  专栏  ›  技术社区  ›  Marco Demaio

Javascript是否已本地化?

  •  18
  • Marco Demaio  · 技术社区  · 16 年前

    你知道tofixed是否是一个本地化函数吗?

    我是说,这会不会:

    var n = 100.67287;
    alert(n.toFixed(2));
    

    显示“ 一百点六七 “在美式英语操作系统/浏览器上 和“ 100,67 (带逗号)在意大利操作系统/浏览器上? (意大利语或使用逗号作为小数分隔符的任何其他本地系统)。

    谢谢!

    5 回复  |  直到 8 年前
        1
  •  17
  •   Robert Massa    16 年前

    不,这将始终返回一个点。这个 ECMA 262-spec [15.7.4.5]指出它应该是一个点。

        2
  •  12
  •   ChrisV    10 年前

    后期添加:与 Number.toLocaleString() 现在,它可以在下面的所有栏(即10&以下)中使用,尽管它的作用相当长:

    var n = 100.67287;
    alert(n.toLocaleString(undefined, { minimumFractionDigits:2, maximumFractionDigits:2 }));
    

    见 developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString 详细信息。

    如果您可以自由扩展数字原型,那么可以定义 Number.toLocaleFixed() .

        3
  •  1
  •   user959690    12 年前

    不遗憾的是,纯jquery/javascript中没有真正的解决方案。你需要全球化。问题是toFixed()和toLocaleString()都接受一个数字并返回一个字符串。所以你不能同时使用它们。:(如果调用foo.tofixed(2.toLocaleString(),则不会得到本地化(即,en中的“1.234”在fr中应为“1234”),因为它处理的是字符串而不是数字tofixed()的结果。:(

        4
  •  -1
  •   isepise    11 年前

    您可以使用:

    var n = 100.67287;
    alert(parseFloat(n.toFixed(2)).toLocaleString());
    

    在我的德语系统中,结果是

    100,67
    
        5
  •  -1
  •   caiohamamura    8 年前

    很容易破解这个限制。

    var num = 1000.994;
    var fixedDecimals = 2;
    var intPart = parseInt(num.toFixed(fixedDecimals));
    var decimalSeparator = (0.1).toLocaleString()[1]
    var decimalPart = (num % 1).toFixed(fixedDecimals).slice(2);
    alert(intPart.toLocaleString() + decimalSeparator + decimalPart);
    
    推荐文章