Onl*_*ere 70 javascript parsefloat
这是一个简单的场景.我想在我的网站上显示两个值的减法:
//Value on my websites HTML is: "75,00"
var fullcost = parseFloat($("#fullcost").text());
//Value on my websites HTML is: "0,03"
var auctioncost = parseFloat($("#auctioncost").text());
alert(fullcost); //Outputs: 75
alert(auctioncost); //Ouputs: 0
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?
Jar*_*Par 132
这是"按设计".该parseFloat
函数只会考虑字符串的各个部分,直到达到非+, - ,数字,指数或小数点.一旦它看到逗号就停止查看,只考虑"75"部分.
要解决此问题,请将逗号转换为小数点.
var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 26
javascript的parseFloat不接受locale参数.所以,你将不得不更换,
同.
parseFloat('0,04'.replace(/,/, '.')); // 0.04
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 18
parseFloat
根据十进制文字的JavaScript 定义解析,而不是您的语言环境定义.(例如,parseFloat
不支持语言环境.)JavaScript中的十进制文字.
用于小数点.
小智 17
为什么不使用globalize?这只是您不使用英语时可以遇到的问题之一:
Globalize.parseFloat('0,04'); // 0.04
Run Code Online (Sandbox Code Playgroud)
stackoverflow上的一些链接可以查看:
Mic*_*res 10
正如@JaredPar在他的回答中指出的那样使用parseFloat
replace
var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
Run Code Online (Sandbox Code Playgroud)
只需更换comma
一个dot
将修复,除非它是这样的数千个1.000.000,00
数字将给你错误的数字.所以你需要更换comma
删除dots
.
// Remove all dot's. Replace the comma.
var fullcost = parseFloat($("#fullcost").text().replace(/\./g,'').replace(',', '.'));
Run Code Online (Sandbox Code Playgroud)
通过使用两个替换,您将能够处理数据而不会在输出中接收错误的数字.
1,234,567 百万的情况下,最好使用此语法替换所有逗号
var string = "1,234,567";
string = string.replace(/[^\d\.\-]/g, "");
var number = parseFloat(string);
console.log(number)
Run Code Online (Sandbox Code Playgroud)
该g
方法删除所有逗号。
在此处查看Jsfiddle 演示。
对于任何到达这里想知道如何处理可能涉及逗号 ( ,
) 和句号 ( .
) 但确切的数字格式可能未知的问题的人 - 这就是我在使用之前更正字符串的方式parseFloat()
(借鉴其他答案的想法):
function preformatFloat(float){
if(!float){
return '';
};
//Index of first comma
const posC = float.indexOf(',');
if(posC === -1){
//No commas found, treat as float
return float;
};
//Index of first full stop
const posFS = float.indexOf('.');
if(posFS === -1){
//Uses commas and not full stops - swap them (e.g. 1,23 --> 1.23)
return float.replace(/\,/g, '.');
};
//Uses both commas and full stops - ensure correct order and remove 1000s separators
return ((posC < posFS) ? (float.replace(/\,/g,'')) : (float.replace(/\./g,'').replace(',', '.')));
};
Run Code Online (Sandbox Code Playgroud)
// <-- parseFloat(preformatFloat('5.200,75'))
// --> 5200.75
Run Code Online (Sandbox Code Playgroud)
至少,这将允许解析英国/美国和欧洲十进制格式(假设字符串包含有效数字)。
归档时间: |
|
查看次数: |
121573 次 |
最近记录: |