Вот простой сценарий. Я хочу показать на моем сайте вычитание двух значений:
//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
Кто-нибудь может сказать мне, что я делаю не так?
javascript
parsefloat
Здесь только боливийский
источник
источник
5.200,75
что означает пять тысяч двести целых семьдесят пять.parseFloat в javascript не принимает параметр локали. Поэтому вам придется заменить
,
на.
parseFloat('0,04'.replace(/,/, '.')); // 0.04
источник
Почему бы не использовать globalize? Это только одна из проблем, с которыми вы можете столкнуться, если не используете английский язык:
Globalize.parseFloat('0,04'); // 0.04
Некоторые ссылки на stackoverflow, чтобы изучить:
источник
parseFloat
выполняет синтаксический анализ в соответствии с определением десятичного литерала в JavaScript , а не в соответствии с определением вашего языкового стандарта. (Например,parseFloat
не зависит от локали.) Десятичные литералы в JavaScript используются.
для десятичной точки.источник
Как отметил @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(',', '.'));
Используя две замены, вы сможете работать с данными без получения неправильных цифр на выходе.
источник
Лучше использовать этот синтаксис для замены всех запятых в случае миллиона 1,234,567
var string = "1,234,567"; string = string.replace(/[^\d\.\-]/g, ""); var number = parseFloat(string); console.log(number)
В
g
средство , чтобы удалить все запятые.Посмотрите демо Jsfiddle здесь .
источник
В числах в JS используется
.
символ (точка / точка) для обозначения десятичной точки, а не,
(запятая).источник
Для тех, кто приезжает сюда и задается вопросом, как решить эту проблему, когда могут быть задействованы запятые (
,
) и точки (.
), но точный формат числа может быть неизвестен - вот как я исправляю строку перед использованием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(',', '.'))); };
// <-- parseFloat(preformatFloat('5.200,75')) // --> 5200.75
По крайней мере, это позволило бы анализировать британские / американские и европейские десятичные форматы (при условии, что строка содержит допустимое число).
источник
1,234.56
и1.234,56
В моем случае у меня уже была точка,
(.)
а также запятая(,)
, поэтому у меня сработалаreplace
запятая(,)
с пустой строкой, как показано ниже:parseFloat('3,000.78'.replace(',', ''))
Предполагается, что сумма из существующей базы данных составляет 3 000,78. Результаты:
3000.78
без начальной запятой(,)
.источник
Валюта страны моего происхождения выглядит как "3.050,89 €".
parseFloat идентифицирует точку как десятичный разделитель, чтобы добавить 2 значения, мы могли бы поместить это так:
parseFloat(element.toString().replace(/\./g,'').replace(',', '.'))
источник