2014-01-29 3 views
0

Пытается научить меня чему-то и может получить только половину пути. У меня есть некоторый код, делающий математику для меня, но он бросает неправильный ответ, потому что я не могу заставить его округлить до двух знаков после запятой. Я надеялся, что кто-то сможет помочь.Округление десятичных разрядов

Пример: Поместите 34 в «сек» ввода и «десятичной» прочитал бы 0,57

Вот ссылка на Скрипке. http://jsfiddle.net/dgtlkvn/mHsgt/

И вот javascript, поскольку я знаю, где проблема.

$(document).ready (
function() { 
    $('#min').keyup(calculate); 
    $('#sec').keyup(calculate); 
    $('#dec').keyup(calculate); 
    $('#dis').keyup(calculate); 
    $('#kilo').keyup(calculate); 
    $('#speed').keyup(calculate); 

});

function calculate(e) { 
    $('#dec').val($('#sec').val()/60); 
    $('#dis').val($('#min').val() + $('#dec').val()); 
    $('#kilo').val(60/$('#dis').val()); 
} 
+0

Что случилось с использованием обычного метода округления (за исключением того факта, что это на самом деле не работает, конечно)? –

+0

Вы можете сохранить код, выполнив следующие действия: $ ('input'). Keyup (calculate); Чтобы форматировать float для отображения, вы можете использовать myNumber.toFixed (2). –

+0

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

ответ

0

Попробуйте

$('#dec').val(Math.floor(($('#sec').val()/60) * 100)/100); 

http://jsfiddle.net/mHsgt/1/

+1

Ответ должен содержать объяснение, почему код OP не работал и почему ваш ответ устраняет проблему. – RobG

1

Значение формы контроля всегда возвращаются как строки. Большинство арифметических операции будут преобразовывать их в число, но не +, которые будут делать конкатенацию если аргумент является строкой, так

$('#dis').val($('#min').val() + $('#dec').val()); 

делает конкатенацию, а не сложение.

Для округления чисел до фиксированного количества мест, используйте toFixed. Пример кода (я думаю, что это проще и гораздо эффективнее канава Jquery для этого):

function calculate(evt) { 
    var el = evt.target || evt.srcElement; 
    var f = el.form; 

    if (!f) return; 

    // Division converts strings to numbers 
    var dec = f.sec.value/60; 

    // Use unary + to convert strings to numbers for addition 
    var dis = +f.min.value + +f.dec.value; 

    // Dispaly values to 2 decimal places (or round if preferred) 
    f.dec.value = dec.toFixed(2); 
    f.dis.value = dis.toFixed(2); 
    f.kilo.value = (60/dis).toFixed(2); 
} 

Некоторых HTML:

<form id="f0" onkeyup="calculate(event);"> 
    <table> 
    <tr><td>Min:<td><input type="text" name="min"> 
    <tr><td>Sec:<td><input type="text" name="sec"> 
    <tr><td>Dec:<td><input type="text" name="dec"> 
    <tr><td>Dis:<td><input type="text" name="dis"> 
    <tr><td>Km:<td><input type="text" name="kilo"> 
    <tr><td>Speed:<td><input type="text" name="speed"> 
    </table> 
</form> 
Смежные вопросы