конвертувати змінну рядка JavaScript в десяткову / гроші


Відповіді:


240

Так - parseFloat.

parseFloat(document.getElementById(amtid4).innerHTML);

Для форматування чисел використовуйте toFixed:

var num = parseFloat(document.getElementById(amtid4).innerHTML).toFixed(2);

num тепер рядок із числом, відформатованим з двома знаками після коми.


1
Чи можемо ми зробити цю змінну з двома знаками після коми, наприклад 120,50? зараз я отримую лише 120,5.
Варада

16
Цитувати @PhilipWhitehouse "Будь ласка, будь-хто, хто читає це в майбутньому, не використовуйте флоат для зберігання валюти. Ви втратите точність і дані. Ви повинні зберігати їх як цілу кількість центів (або копійок тощо), а потім конвертувати до для виведення. " Джерело: stackoverflow.com/questions/149055/…
SSH Це

@SSHTЦе наскільки мені відомо, JavaScript не має цілого типу. Він має лише тип номера, який зберігається всередині нумерації з плаваючою комою з 64 біт. Ваш пункт дійсний для інших мов, які мають цілі типи, такі як C #, C ++, але насправді не для JavaScript.
Саймон Брангвін

1
@SimonBrangwin Його думка досі справедлива, але семантика може бути заплутаною. Що він насправді означає - "зберігати в javascript лише валюту як цілі числа, оскільки вони зберігатимуться як числа з плаваючою комою".
Джош Ное

Лише нагадування: parseFloat('22w')є 22і parseFloat('w22')єNaN
IG Pascual

65

Ви також можете скористатися Numberконструктором / функцією (немає необхідності в radix і може бути використаний як для цілих чисел, так і для плавців):

Number('09'); /=> 9
Number('09.0987'); /=> 9.0987

Крім того, як сказав Енді Е в коментарях, які ви можете використовувати +для конверсії

+'09'; /=> 9
+'09.0987'; /=> 9.0987

Це не підтримується IE11
Штани

@Pants, що стосується розширень до вбудованого об'єкта Number у ES6 , а не про можливість користуванняNumber
KooiInc


10
var formatter = new Intl.NumberFormat("ru", {
  style: "currency",
  currency: "GBP"
});

alert( formatter.format(1234.5) ); // 1 234,5 £

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat


Я не мав уявлення, що це існує.
протомета

Найкраща відповідь на сьогоднішній день. розбір Точність пекла? Ні, thx! Intl.NumberFormatцвяхи це.
Джошуа Бернс

2

Досить ризиковано покладатися на функції JavaScript для порівняння та відтворення з числами. У javascript (0,1 + 0,2 == 0,3) повернеться помилковим через помилки округлення. Використовуйте бібліотеку math.js.


1

Простим коротким способом буде використання + x. Він зберігає знак недоторканим, а також десяткові числа. Інша альтернатива - використовувати parseFloat (x). Різниця між parseFloat (x) і + x є для порожнього рядка + x повертає 0, де як parseFloat (x) повертає NaN.


1

Я зробив невелику функцію помічника, щоб зробити це і зафіксувати всі неправильно сформовані дані

function convertToPounds(str) { 
    var n = Number.parseFloat(str);
    if(!str || isNaN(n) || n < 0) return 0;
    return n.toFixed(2);
}

Демо тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.