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

В принципе, добавьте это в pom.xml:

...

<repositories>
   <repository>
       <id>lib_id</id>
       <url>file://${project.basedir}/lib</url>
   </repository>
</repositories>

...

<dependencies>
  ...
  <dependency>
      <groupId>com.mylibrary</groupId>
      <artifactId>mylibraryname</artifactId>
      <version>1.0.0</version>
  </dependency>
  ...
</dependencies>
375
задан Ramratan Gupta 6 June 2018 в 06:39
поделиться

14 ответов

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

var twoPlacedFloat = parseFloat(yourString).toFixed(2)
843
ответ дан bob esponja 6 June 2018 в 06:39
поделиться

Когда вы используете 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
46
ответ дан kangax 6 June 2018 в 06:39
поделиться

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

Math.round(number * 100) / 100

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

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

42
ответ дан Rob Boerman 6 June 2018 в 06:39
поделиться

Чтобы вернуть число, добавьте еще один слой скобок. Содержит это в чистоте.

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));
8
ответ дан pvanallen 6 June 2018 в 06:39
поделиться

простая строка JavaScript для плавания

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);
    }
}
-1
ответ дан Pang 6 June 2018 в 06:39
поделиться
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;
  }
-1
ответ дан Thulasiram Virupakshi 6 June 2018 в 06:39
поделиться

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

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

var twoPlacedFloat = parseFloat(yourString).round(2)
-3
ответ дан Rostyslav Dzinko 6 June 2018 в 06:39
поделиться

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

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

0
ответ дан andora 6 June 2018 в 06:39
поделиться

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

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

function parseFloat2Decimals(value,decimalPlaces) {
    return parseFloat(parseFloat(value).toFixed(decimalPlaces));
}
2
ответ дан Savage 6 June 2018 в 06:39
поделиться

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

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

  1. Либо использовать данные в виде строки, либо
  2. Согласиться, чтобы усеченное значение с регистром '0' было в конце ex 2.50 -> 2.5. Number Cannot have trailing zeros after decimal
1
ответ дан abhinav pandey 6 June 2018 в 06:39
поделиться

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

function ConvertToDecimal(num) {
    num = num.toString(); //If it's 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    
}
0
ответ дан Nimesh 6 June 2018 в 06:39
поделиться

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

function fixInteger(el) {
    // this is element's 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's 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);
}
-1
ответ дан arghtype 6 June 2018 в 06:39
поделиться

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

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

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

1
ответ дан Antonio Terreno 6 June 2018 в 06:39
поделиться

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

parseFloat(value)
-1
ответ дан Jorge Santos Neill 6 June 2018 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: