Как разобрать с плавающей запятой с двумя десятичными знаками в JavaScript?

У меня есть следующий код. Я бы хотел, чтобы это было так, что если price_result равно целому числу, скажем 10, то я бы хотел добавить два десятичных знака. Так что 10 будет 10.00. Или, если он равен 10,6, будет 10.60. Не знаете, как это сделать.

price_result = parseFloat(test_var.split('$')[1].slice(0,-1));

Ответ 1

Вы можете использовать toFixed(), чтобы сделать это

var twoPlacedFloat = parseFloat(yourString).toFixed(2)

Ответ 2

Когда вы используете toFixed, он всегда возвращает значение в виде строки. Это иногда усложняет код. Чтобы этого избежать, вы можете сделать альтернативный метод для Number.

Number.prototype.round = function(p) {
  p = p || 10;
  return parseFloat( this.toFixed(p) );
};

и используйте:

var n = 22 / 7; // 3.142857142857143
n.round(3); // 3.143

или просто:

(22/7).round(3); // 3.143

Ответ 3

Если вам нужна производительность (например, в играх):

Math.round(number * 100) / 100

Это примерно в 100 раз быстрее, чем parseFloat (number.toFixed(2))

http://jsperf.com/parsefloat-tofixed-vs-math-round

Ответ 4

Чтобы вернуть число, добавьте еще один круг скобок. Сохраняет чистоту.

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));

Ответ 5

Если ваша цель состоит в анализе, и ваш ввод может быть литералом, тогда вы ожидаете, что float и toFixed не предоставят этого, так что вот две простые функции для этого:

function parseFloat2Decimals(value) {
    return parseFloat(parseFloat(value).toFixed(2));
}

function parseFloat2Decimals(value,decimalPlaces) {
    return parseFloat(parseFloat(value).toFixed(decimalPlaces));
}

Ответ 6

ceil from lodash, вероятно, лучший

_.ceil("315.9250488",2) 
_.ceil(315.9250488,2) 
_.ceil(undefined,2)
_.ceil(null,2)
_.ceil("",2)

будет работать также с номером, и это безопасно

Ответ 7

Пожалуйста, используйте функцию ниже, если вы не хотите округлять.

function ConvertToDecimal(num) {
    num = num.toString(); //If it not already a String
    num = num.slice(0, (num.indexOf(".")) + 3); //With 3 exposing the hundredths place
   alert('M : ' +  Number(num)); //If you need it back as a Number    
}

Ответ 8

Для чего его ценность: десятичное число, является десятичным числом, вы либо округляете его до какого-то другого значения, либо нет. Внутри он будет приближать десятичную дробь в соответствии с правилом с плавающей запятой и обработкой. Он остается десятичным числом (с плавающей запятой, в JS двойным) внутри, независимо от того, как вы много цифр вы хотите отображать с помощью.

Чтобы представить его для отображения, вы можете выбрать точность отображения в соответствии с тем, что вы хотите, преобразованием строки. Презентация - это проблема отображения, а не предмет хранения.

Ответ 9

Краткий ответ @sd : в JS нет способа получить значение типа данных Number с конечными нулями после десятичной дроби.

Длинный ответ: Свойство toFixed или toPrecision для возврата String. Причина этого заключается в том, что тип данных Number не может иметь значение, подобное a = 2.00, он всегда удаляет завершающие нули после десятичной дроби, поэтому для достижения вышеупомянутого в JS у нас есть 2 варианта

  1. Либо использовать данные в виде строки или
  2. Согласитесь, чтобы в конце было усеченное значение с регистром '0', например 2.50 → 2.5. Number Cannot have trailing zeros after decimal

Ответ 10

Попробуйте это (см. комментарии в коде):

function fixInteger(el) {
    // this is element value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseInt(value);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseInt(value);
    }
    // apply new value to element
    $(el).val(newValue);
}

function fixPrice(el) {
    // this is element value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseFloat(value.replace(',', '.')).toFixed(2);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseFloat(value).toFixed(2);
    }
    // apply new value to element
    $(el).val(newValue);
}

Ответ 11

простая строка javascript для float

var it_price = chief_double($("#ContentPlaceHolder1_txt_it_price").val());

function chief_double(num){
    var n = parseFloat(num);
    if (isNaN(n)) {
        return "0";
    }
    else {
        return parseFloat(num);
    }
}

Ответ 12

Решение, которое работает для меня, заключается в следующем

parseFloat(value)

Ответ 13

Solution for FormArray controllers 

Инициализировать FormArray Form Builder

  formInitilize() {
    this.Form = this._formBuilder.group({
      formArray: this._formBuilder.array([this.createForm()])
    });
  }

Создать форму

  createForm() {
    return (this.Form = this._formBuilder.group({
      convertodecimal: ['']
    }));
  }

Установить значения формы в контроллере формы

  setFormvalues() {
    this.Form.setControl('formArray', this._formBuilder.array([]));
    const control = <FormArray>this.resourceBalanceForm.controls['formArray'];
    this.ListArrayValues.forEach((x) => {
      control.push(this.buildForm(x));
    });
  }

  private buildForm(x): FormGroup {
    const bindvalues= this._formBuilder.group({
      convertodecimal: x.ArrayCollection1? parseFloat(x.ArrayCollection1[0].name).toFixed(2) : '' // Option for array collection
// convertodecimal: x.number.toFixed(2)    --- option for two decimal value 
    });

    return bindvalues;
  }

Ответ 14

У меня есть другое решение.

Вы можете использовать round() для этого вместо toFixed()

var twoPlacedFloat = parseFloat(yourString).round(2)