Как мне остановить parseFloat () от удаления нулей справа от десятичной - PullRequest
19 голосов
/ 02 февраля 2011

У меня есть функция, которую я использую, чтобы удалить ненужные символы (определенные как символы валюты) из строк, а затем вернуть значение в виде числа. При возврате значения я делаю следующий вызов:

return parseFloat(x);

У меня проблема в том, что когда x == "0.00", я ожидаю получить обратно 0.00 (число с плавающей запятой с двумя десятичными знаками) Вместо этого я получаю просто 0.

Я также попробовал следующее:

return parseFloat(x).toFixed(2);

и все равно получите просто 0 обратно. Я что-то пропустил? Любая помощь будет принята с благодарностью.

Спасибо !!

Ответы [ 4 ]

14 голосов
/ 02 февраля 2011

parseFloat () превращает строку в число с плавающей запятой. Это двоичное значение, а не десятичное представление, поэтому концепция количества нулей справа от десятичной точки даже не применима; все зависит от того, как он отформатирован обратно в строку. Что касается исправления, я бы предложил преобразовать число с плавающей запятой в число:

new Number(parseFloat(x)).toFixed(2);
10 голосов
/ 02 февраля 2011

это должно работать:

return parseFloat(x).toFixed(2);

Вы можете проверить это, запустив это в firebug:

var x = '0.00';
alert(parseFloat(x).toFixed(2));
5 голосов
/ 02 февраля 2011

простой:

function decimalPlaces(float,length) {
  ret = "";
  str = float.toString();
  array = str.split(".");
  if(array.length==2) {
     ret += array[0] + ".";
     for(i=0;i<length;i++) {
        if(i>=array[1].length) ret += '0';
        else ret+= array[1][i];
     }
  }
  else if(array.length == 1) {
    ret += array[0] + ".";
    for(i=0;i<length;i++) {
       ret += '0'
    }
  }

  return ret;
}

document.write(decimalPlaces(3.123,6));
0 голосов
/ 10 января 2019

Для будущих читателей у меня возникла эта проблема, так как я хотел разобрать значение onChange textField в число с плавающей запятой, чтобы, когда пользователь печатал, я мог обновить свою модель.

Проблема была сдесятичное место и значения, такие как 12.120, будут анализироваться как 12.12, поэтому пользователь никогда не сможет ввести значение, такое как 12.1201.

. Я решил, что это нужно, чтобы проверить, если Значение STRING содержит десятичный знак, а затем разбивает строку на этот десятичный знак, а затем подсчитывает количество символов после этого места, а затем форматирует число с указанным количеством мест.

Для иллюстрации:

const hasDecimal = event.target.value.includes(".");
const decimalValue = (hasDecimal ? event.target.value.split(".") : [event.target.value, ""])[1];
const parsed = parseFloat(event.target.value).toFixed(decimalValue.length);
const value = isNaN(parsed) ? "" : parsed;
onEditValue(value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...