Я пытаюсь установить выходное значение от 2 полей до 2 десятичных знаков.
Я пытался сделать это с: .toFixed(2), но у меня это не сработало. Я пытался сделать это:

calculate = function () {
      var total = document.getElementById('totaal').value;
      var btw = document.getElementById('percentage').value;
      document.getElementById('btw').value = parseInt(total.toFixed(2)) * parseInt(btw.toFixed(2)) / 100;
  }

Если поле заканчивается числом с двумя десятичными знаками (например, 3,45), оно работает правильно.
Но если оно заканчивается 0, оно не показывает 0.

Я думаю, что это не должно быть так много, но я просто пытаюсь на полдня ...

Заранее спасибо!

0
Loosie94 26 Авг 2017 в 23:28

5 ответов

Лучший ответ

Когда вы используете parseInt(), вы получаете числа после удаления десятичных знаков, попробуйте сделать это:

document.getElementById('btw').value = (parseFloat(total) * parseFloat(btw) / 100).toFixed(2);

parseFloat преобразует строку (и это необходимо, потому что входные значения являются строкой) во входных данных в число с плавающей точкой, затем делит на 100 и вызывает .toFixed(2) для результата.

2
MrGeek 26 Авг 2017 в 20:36

Ваша проблема в том, что вы запускаете toFixed() для строк, а toFixed() работает только для чисел.

Вы можете, однако, сделать это:

document.getElementById('btw').value = 
        (parseInt(total) * parseInt(btw) / 100).toFixed(2)

Это берет два числа и делает всю математику. Затем он преобразует его в строку с двумя конечными десятичными числами

Смотрите мою скрипку здесь: https://jsfiddle.net/6vtrjmax/

0
Get Off My Lawn 26 Авг 2017 в 20:36

Вы можете использовать parseFloat для достижения этой цели

var total =65633;
var btw  = 12;

console.log(parseFloat((total* btw)/100).toFixed(2))
0
Aravind 26 Авг 2017 в 20:33

Убедитесь, что вы вызываете toFixed для всей операции, т.е. document.getElementById("btw").value = (parseInt(total) * parseInt(btw) / 100).toFixed(2);

Попробуйте запустить фрагмент ниже:

calculate = function() {
  var total = document.getElementById("total").value;
  var btw = document.getElementById("percentage").value;
  if (total && btw) {
    document.getElementById("btw").value = 
      (parseInt(total) * parseInt(btw) / 100).toFixed(2);
  }
};
<input onchange="calculate()" placeholder='total' type="decimal" id="total">
<input onchange="calculate()" placeholder='percentage' type="decimal" id="percentage">
<input type="decimal" placeholder='result' id="btw">
0
Dan Kreiger 26 Авг 2017 в 20:41

Вы можете преобразовать строку в число, используя унарный плюс +.

document.getElementById('btw').value = (+total * +btw / 100).toFixed(2);

Если вы используете parseInt, вы теряете точность, которая может у вас быть.

1
Nina Scholz 26 Авг 2017 в 20:32