Javascript parse float игнорирует десятичные дроби после моей запятой - PullRequest
65 голосов
/ 27 сентября 2011

Вот простой сценарий. Я хочу показать вычитание двух значений, показанных на моем сайте:

//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

Может кто-нибудь сказать мне, что я делаю не так?

Ответы [ 7 ]

120 голосов
/ 27 сентября 2011

Это «По замыслу». Функция parseFloat будет рассматривать только части строки до тех пор, пока in не достигнет +, -, число, экспонента или десятичная точка. Как только он видит запятую, он перестает смотреть и рассматривает только часть "75".

Чтобы исправить это, конвертируйте запятые в десятичные точки.

var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
25 голосов
/ 27 сентября 2011

javascript parseFloat не принимает параметр локали.Таким образом, вам придется заменить , на .

parseFloat('0,04'.replace(/,/, '.')); // 0.04
17 голосов
/ 27 сентября 2011

parseFloat анализирует в соответствии с определением JavaScript десятичного литерала , а не определением вашей локали.(Например, parseFloat не поддерживает локали.) Десятичные литералы в JavaScript используют . для десятичной точки.

15 голосов
/ 27 декабря 2013

Почему бы не использовать globalize? Это только одна из проблем, с которыми вы можете столкнуться, если не используете английский язык:

Globalize.parseFloat('0,04'); // 0.04

Некоторые ссылки на stackoverflow для просмотра:

10 голосов
/ 17 марта 2014

Как @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(',', '.'));

Используя две замены, вы сможете обрабатывать данные, не получая неправильных цифр в выводе.

5 голосов
/ 27 сентября 2011

Числа в JS используют символ . (полный стоп / период) для обозначения десятичной точки, а не , (запятая).

4 голосов
/ 21 января 2018

Лучше использовать этот синтаксис для замены всех запятых в случае миллиона 1 234 567

var string = "1,234,567";
string = string.replace(/[^\d\.\-]/g, ""); 
var number = parseFloat(string);
console.log(number)

g означает удаление всех запятых.

Проверьте Демоверсия Jsfiddle здесь .

...