【问题标题】:Javascript parseFloat(number) - parseFloat(number2) returning intJavascript parseFloat(number) - parseFloat(number2) 返回 int
【发布时间】:2014-03-11 13:32:05
【问题描述】:

很抱歉,我需要帮助:(

我尝试将字符串转换为十进制,它可以工作,但我有一些问题:

    number = document.getElementById("totalcost").innerHTML;    //It is a string, but I am sure that it is a decimal
    number2 = prodCost;  //it is a string but in fact it is a decimal too
    alert(parseFloat(number)); // prints good (if number is 88,9 it will print 88,9)
    alert(parseFloat(number2)); // it's ok too

    alert(parseFloat(number) - parseFloat(number2)); // this is not ok :(
    //if number=88,9 and number2=17,77 I get 71 but i need 71,13

哦,伙计们,我很抱歉,我很傻。太感谢了!我已经连续工作了 9 个小时。真的很抱歉,谢谢大家!

【问题讨论】:

标签: javascript


【解决方案1】:

这看起来像是一个语言环境问题:parseFloat 仅将句点识别为小数点;当它到达逗号时它会停止解析,只给你整数值。不幸的是,没有办法改变这种行为。您需要将数字字符串中的逗号替换为句点才能获得十进制数。

【讨论】:

  • 这似乎与 OP 的观察相矛盾(暗示他实际上并未使用 , 作为小数分隔符): > alert(parseFloat(number)); // 打印好(如果数字是 88,9,它将打印 88,9)
  • @Tibos - 我同意。不过,我怀疑 OP 实际上是在执行 alert(number) 而不是 alert(parseFloat(number)) 并且仅在需要减法时才使用 parseFloat
  • 我很抱歉,我很傻。非常感谢!
  • @user3406280 - 没有什么愚蠢的。在我看来,这是 JavaScript 的一个缺陷。 (有Intl 对象--参见ECMAScript Internationalization API--支持以区域设置敏感的方式格式化数字,但没有其他方式。)
【解决方案2】:

如果您将使用点而不是逗号(例如:71.13 而不是 71,13)一切都会按预期工作

【讨论】:

    【解决方案3】:

    parseIntparseFloat 采用提供的字符串中的第一个有效数字。

    , 无效

    parseFloat("17,77".replace(",","")); //1777
    

    如果逗号用作分隔符,应该可以解决问题。

    或者如果逗号被用作小数点

    parseFloat("17,77".replace(",",".")); //17.77
    

    在 MDN here中有解释

    如果 parseInt 在 指定的基数,它会忽略它以及所有后续字符和 返回解析到该点的整数值。 parseInt 截断 数字到整数值。允许前导和尾随空格。

    【讨论】:

      【解决方案4】:

      您似乎需要使用这些标准来操作数字

      • 小数点分隔符是“,”而不是“.”,例如 1,2345(一个点二三四五)
      • 组分隔符是'.'而不是 ',' 像 1.000,1(一千个点)

      您可以使用 numeric.js 来满足此需求。

      尝试去http://numeraljs.com/打开chrome dev,然后尝试用这些示例代码自己玩

      // declare fr lang
      numeral.language('fr', {
          delimiters: {
              thousands: ' ',
              decimal: ','
          },
          abbreviations: {
              thousand: 'k',
              million: 'm',
              billion: 'b',
              trillion: 't'
          },
          ordinal : function (number) {
              return number === 1 ? 'er' : 'ème';
          },
          currency: {
              symbol: '€'
          }
      });
      
      numeral.language('fr'); // set fr lang
      
      number = '88,9';
      number2 = '17,77';
      
      numberRaw = numeral().unformat(number); // convert string to number
      numberRaw2 = numeral().unformat(number2); // convert string to number
      
      resultRaw = numberRaw - numberRaw2; // calculate result
      
      resultStr = numeral(resultRaw).format('0,0.00'); // format to string
      
      console.log(resultStr); // print 71,13
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多