正确转换浮点数?
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]))
对字符串进行一次遍历,删除句点并用句点替换逗号
【讨论】:
以上是关于正确转换浮点数?的主要内容,如果未能解决你的问题,请参考以下文章