【问题标题】:Convert float number properly?正确转换浮点数?
【发布时间】:2019-10-14 16:00:18
【问题描述】:

如何将此字符串转换为1000000?问题是我总是得到10000:

console.log(parseFloat('10.000.000,00'.replace('.', ',').replace(/,(?=[^,]*$)/, '.')),'test');

有什么建议吗?

【问题讨论】:

标签: javascript


【解决方案1】:
parseFloat(a.replace(/\./g, '').replace(',', '.'))

【讨论】:

    【解决方案2】:

    你可以使用:

    parseFloat('10.000.000,00'.replace(/\./g, '').replace(',', '.'), 10)
    

    【讨论】:

      【解决方案3】:

      你也可以这样做:
      '10.000.000,00'.split(',')[0].replace(/\./g,'');

      因此,在这种情况下,您可以将它用于, 之后的任何十进制值,因此如果您希望稍后添加此值,您可以使用返回的[1] 位置获取它split.

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        /** German number format info */
        const numberFomatInfoDeDe = {
          decimalSeparator: ",",
          numberGroupSeparator: ".",
        };
        
        /**
         * Converts a string to a number.
         * @param str The string to convert.
         * @param numberFomatInfo Information for the conversion.
         * @returns The number. NaN if the string cannot be converted.
         */
        function stringToNumber(str, numberFomatInfo) {
          let tmp = str;
        
          tmp = tmp.replace(new RegExp("\\" + numberFomatInfo.numberGroupSeparator, "g"), "");
          tmp = tmp.replace(numberFomatInfo.decimalSeparator, ".");
        
          return parseFloat(tmp);
        }
        
        // Tests
        console.log(stringToNumber("10.000.000,00", numberFomatInfoDeDe));
        console.log(stringToNumber("10,00", numberFomatInfoDeDe));
        console.log(stringToNumber("-10", numberFomatInfoDeDe));
        console.log(stringToNumber("asdf", numberFomatInfoDeDe));

        【讨论】:

          【解决方案5】:

          您的代码可能没有按照您的预期执行。您应该尝试在调试器中分别运行每个子表达式,即:

          '10.000.000,00'.replace('.', ',')
          

          返回"10,000.000,00",即只有第一个句点被逗号替换,而:

          "10,000.000,00".replace(/,(?=[^,]*$)/, '.')
          

          计算为:"10,000.000.00",即最后一个逗号替换为句点。然后你做:

          parseFloat("10,000.000.00")
          

          计算结果为 10。

          请注意,您还可以将函数传递给 replace 函数,该函数可用作:

          '10.000.000,00'.replace(/[.,]/g, m => ({'.':'', ',':'.'}[m]))
          

          对字符串进行一次遍历,删除句点并用句点替换逗号

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-12
            • 1970-01-01
            • 2011-01-17
            • 1970-01-01
            • 2011-06-05
            相关资源
            最近更新 更多