正确转换浮点数?

Posted

技术标签:

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

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

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

有什么建议吗?

【问题讨论】:

用空字符串替换小数点,然后用小数点替换逗号? 切换替换状态的顺序 ***.com/questions/12694455/… 的可能重复项 你应该先尝试在纸上替换。 【参考方案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]))

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

【讨论】:

以上是关于正确转换浮点数?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中正确转换浮点数

浮点数的基数排序

将 CString 转换为浮点数

怎么将4字节16进制转化成浮点数

在C语言中,如何将一个浮点数变换成整数?

将 VarChar 转换为具有不同文化格式的浮点数