Я намагаюся проаналізувати два значення із сітки даних. Поля є числовими, і коли у них є кома (напр. 554,20), я не можу отримати числа після коми. Я спробував parseInt
і parseFloat
. Як я можу це зробити?
Я намагаюся проаналізувати два значення із сітки даних. Поля є числовими, і коли у них є кома (напр. 554,20), я не можу отримати числа після коми. Я спробував parseInt
і parseFloat
. Як я можу це зробити?
Відповіді:
Якщо вони мають бути окремими значеннями, спробуйте це:
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]);
.
6.000.000
. Функція заміни лише замінити перший роздільник комами
Ви коли-небудь намагалися це зробити? : с
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (string) передасть рядок у float.
Зручно!
Отже, щоб вирішити свою проблему, ви можете зробити щось подібне:
var floatValue = +(str.replace(/,/,'.'));
+(str)
рішення - parseFloat
ігнорує недійсні символи після числа, +(str)
повертає NaN
в тих випадках, саме це мені і потрібно.
Замініть кому крапкою.
Це поверне лише 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,",");
Ви можете використовувати цю функцію. Він замінить коми на '', а потім буде розбирати значення Flaot і після цього знову коригуватиме коси у значенні.
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});