Javascript parse float игнорирует десятичные знаки после запятой
Вот простой сценарий. Я хочу показать вычитание двух значений на моем сайте:
//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
Может ли кто-нибудь сказать мне, что я делаю неправильно?
Ответы
Ответ 1
Это "По дизайну". Функция parseFloat
будет рассматривать части строки только до тех пор, пока не достигнет значения, отличного от +, -, числа, экспоненты или десятичной точки. Когда он видит запятую, он перестает смотреть и только рассматривает часть "75".
Чтобы исправить это, переведите запятые в десятичные точки.
var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
Ответ 2
javascript parseFloat не принимает параметр locale. Поэтому вам нужно будет заменить ,
на .
parseFloat('0,04'.replace(/,/, '.')); // 0.04
Ответ 3
parseFloat
анализирует в соответствии с JavaScript определение десятичного литерала, а не определение вашей локали. (Например, parseFloat
не поддерживается локалью.) Десятичные литералы в JavaScript используют .
для десятичной точки.
Ответ 4
Почему бы не использовать глобализацию? Это только одна из проблем, с которой вы можете столкнуться, когда вы не используете английский язык:
Globalize.parseFloat('0,04'); // 0.04
Некоторые ссылки на stackoverflow для просмотра:
Ответ 5
Как @JaredPar указал в его ответе, используйте parseFloat
с заменой
var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
Только замена comma
на dot
будет исправлена, Если не, то число над тысячами, например 1.000.000,00
, приведет к неправильной цифре. Поэтому вам нужно заменить comma
удалить dots
.
// Remove all dot's. Replace the comma.
var fullcost = parseFloat($("#fullcost").text().replace(/\./g,'').replace(',', '.'));
Используя два замещения, вы сможете обрабатывать данные без получения неправильных цифр на выходе.
Ответ 6
Числа в JS используют символ .
(полный стоп/период), чтобы указать десятичную точку не a ,
(запятая).