ParseFloat округления
64447 просмотра
5 ответа
У меня есть функция javascript, которая автоматически добавляет поля ввода вместе, но добавление чисел, таких как 1.35 + 1.35 + 1.35, дает мне вывод 4.050000000000001, просто в качестве примера. Как я могу округлить сумму до второго десятичного числа вместо этой длинной строки?
Поля ввода будут иметь больше, чем просто пример 1.35, поэтому мне нужно, чтобы итоговое значение никогда не превышало 2 точек после запятой. Вот полный рабочий код:
<html>
<head>
<script type="text/javascript">
function Calc(className){
var elements = document.getElementsByClassName(className);
var total = 0;
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value);
}
document.form0.total.value = total;
}
function addone(field) {
field.value = Number(field.value) + 1;
Calc('add');
}
</script>
</head>
<body>
<form name="form0" id="form0">
1: <input type="text" name="box1" id="box1" class="add" value="0" onKeyUp="Calc('add')" onChange="updatesum()" onClick="this.focus();this.select();" />
<input type="button" value=" + " onclick="addone(box1);">
<br />
2: <input type="text" name="box2" id="box2" class="add" value="0" onKeyUp="Calc('add')" onClick="this.focus();this.select();" />
<input type="button" value=" + " onclick="addone(box2);">
<br />
<br />
Total: <input readonly style="border:0px; font-size:14; color:red;" id="total" name="total">
<br />
</form>
</body></html>
Некоторые вещи, которые я пробовал, должны работать, но я явно неправильно их реализую:
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value.toString().match(/^\d+(?:\.\d{0,2})?/));
var str = total.toFixed(2);
или же
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value * 100) / 100).toFixed(2)
Также не повезло с Math.floor
Ответы (5)
62 плюса
Используйте toFixed()
для округления num
до 2 десятичных цифр, используя традиционный метод округления. Округление с 4.050000000000001 до 4.05.
num.toFixed(2);
Вы можете предпочесть использование toPrecision()
, которое лишит любые конечные нули.
Пример :
1.35+1.35+1.35 => 4.050000000000001
(1.35+1.35+1.35).toFixed(2) => 4.05
(1.35+1.35+1.35).toPrecision(3) => 4.05
// or...
(1.35+1.35+1.35).toFixed(4) => 4.0500
(1.35+1.35+1.35).toPrecision(4) => 4.05
Ссылка: JavaScript Number Format - десятичная точность
Автор: marcog Размещён: 09.01.2011 05:003 плюса
var num = 4.050000000000001;
num = num.toFixed(2);
toFixed
будет округляться в зависимости от того, сколько цифр после запятой вы ищете.
2 плюса
Вы можете использовать Math.round(total*100000000000)/100000000000;
в коде. Это будет работать для большинства случаев
1 плюс
Это работает:
$(document).ready(
function() {
$('#field1').blur(function(){ $('#field2').val(parseFloat($(this).val() * 2.2).toFixed(1)); });
$('#field2').blur(function(){ $('#field1').val(parseFloat($(this).val() / 2.2).toFixed(1)); });
}
);
Это не удается:
$(document).ready(
function() {
$('#field1').blur(function(){ $('#field2').val(parseFloat($(this).val() * 2.2)).toFixed(1); });
$('#field2').blur(function(){ $('#field1').val(parseFloat($(this).val() / 2.2)).toFixed(1); });
}
);
Так что будьте осторожны при размещении скобок () ... В первом случае округление будет работать, а во втором - не будет ...
Автор: Real Melancon Размещён: 01.06.2012 06:590 плюса
Вместо округления вы можете использовать порт Java BigDecimal для получения точной десятичной математики.
Автор: Michael Borgwardt Размещён: 09.01.2011 05:15Вопросы из категории :
- javascript Как определить, какой из указанных шрифтов был использован на веб-странице?
- javascript Валидация клиентской стороны ASP.Net
- javascript Длина объекта JavaScript
- javascript Получение текста из выпадающего списка
- javascript Скрипт входа со скрытыми кнопками
- javascript Как автоматически изменить размер текстовой области с помощью Prototype?
- math Головоломка: Найти самый большой прямоугольник (проблема максимального прямоугольника)
- math Как округлить результат целочисленного деления?
- math Алгоритм нахождения наибольшего простого множителя числа
- math Рассчитать расстояние между двумя точками широты и долготы? (Формула Haversine)
- math Каков стандартный способ добавить N секунд для datetime.time в Python?
- math Наиболее эффективный способ реализации целочисленной степенной функции pow (int, int)
- parsefloat ParseFloat округления
- parsefloat Javascript parse float игнорирует десятичные дроби после моей запятой
- parsefloat Добавление десятичной дроби к числу с помощью onclick () в JavaScript
- parsefloat jQuery parseFloat не работает, как ожидалось
- parsefloat сумма чисел с плавающей точкой не дает десятичных дробей в JavaScript
- parsefloat Округление числа до двух знаков после запятой