Я пытаюсь разобрать два значения из таблицы данных. Поля числовые, и когда в них есть запятая (например, 554,20), я не могу получить числа после запятой. Я пробовал parseInt
и parseFloat
. Как я могу это сделать?
Как преобразовать строку в число с плавающей запятой в JavaScript?
Ответы (9)
Если они должны быть отдельными значениями, попробуйте следующее:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
Если они должны быть одним значением (например, во французском языке, где половина написана 0,5)
var value = parseFloat("554,20".replace(",", "."));
+(string)
вместо parseString(string)
, как предлагает @Stev ниже. Итак, первым примером будет v1 = +(values[0]); v2 = +(values[1]);
.
- person Jesse Rusak; 08.11.2012
6.000.000
. Функция заменить только первый разделитель запятой
- person GusDeCooL; 18.09.2013
g
, чтобы выполнить глобальную замену строки. например string.replace(/,/g, '.')
.
- person mAAdhaTTah; 20.01.2017
Вы когда-нибудь пробовали это делать? :п
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (строка) преобразует строку в число с плавающей запятой.
Удобно!
Итак, чтобы решить вашу проблему, вы можете сделать что-то вроде этого:
var floatValue = +(str.replace(/,/,'.'));
+(str)
- parseFloat
игнорирует недопустимые символы после числа, +(str)
в этих случаях возвращает NaN
, что мне и нужно.
- person Alex; 28.05.2012
Замените запятую точкой.
Это вернет только 554:
var value = parseFloat("554,20")
Это вернет 554.20:
var value = parseFloat("554.20")
В конце концов, вы можете просто использовать:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
Не забывайте, что parseInt()
следует использовать только для анализа целых чисел (без чисел с плавающей запятой). В вашем случае он вернет только 554. Кроме того, вызов parseInt () для числа с плавающей запятой не будет округлять число: он будет занимать его пол (ближайшее меньшее целое число).
Расширенный пример ответа на вопрос Педро Феррейры из комментариев:
Если текстовое поле содержит точки-разделители тысяч, как в 1.234.567,99
, их можно заранее удалить с помощью другого replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
Если вы расширите объект String следующим образом ..
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
.. вы можете запустить это так
"554,20".float()
> 554.20
работает и с точкой
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool или кто-либо другой, пытающийся заменить более одной тысячи разделителей, один из способов сделать это - глобальная замена регулярного выражения: /foo/g
. Просто помните, что .
- это метасимвол, поэтому вам нужно убрать его или заключить в квадратные скобки (\.
или [.]
). Вот один из вариантов:
var str = '6.000.000';
str.replace(/[.]/g,",");
Вы можете использовать эту функцию. Он заменит запятые на '', а затем проанализирует значение, а после этого снова изменит запятые в значении.
function convertToFloat(val) {
if (val != '') {
if (val.indexOf(',') !== -1)
val.replace(',', '');
val = parseFloat(val);
while (/(\d+)(\d{3})/.test(val.toString())) {
val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
}
}
return val;
}
У меня была та же проблема, за исключением того, что я не знал заранее, что такое разделители тысяч и десятичный разделитель. В итоге я написал библиотеку для этого. Если вас это интересует, вот оно: https://github.com/GuillaumeLeclerc/number-parsing
Пытаться
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});
Если кто-то ищет способ разобрать float из произвольной строки,
это можно сделать так:
function extractFloat(text) {
const match = text.match(/\d+((\.|,)\d+)?/)
return match && match[0]
}
extractFloat('some text with float 5.25') // 5.25