toFixed(); только возвращается.00

Приведенный ниже код возвращает десятичные разряды, но он не возвращает значений, отличных от.00, когда мои значения установлены на.67, 1.33, 2.67 и т. Д.

$(function($) {
    $('#CourseMenu select').change(function() {
        var sum = 0;
        $('#CourseMenu select').each(function(idx, elm) {
            sum += parseInt(elm.value, 10);
        });

     $('#total_potential').html(Math.min(sum,72).toFixed(2));
    });
});

Вот откуда js извлекает данные...

            <legend>Transfer Course Information</legend>
<label for="School Int.">School Int.</label> 
          <input name="School Int." type="text" size="6" maxlength="6" /> &nbsp; 

          <label for="ID">ID</label>
          <input name="ID" type="text" id="ID" size="8" /> &nbsp; 

            <label for="Name">Name</label>
          <input name="Name" type="text" id="Name" size="25" />&nbsp;

          <label for="Grade">Grade</label>
          <input name="Grade" type="text" id="Grade" size="2" />&nbsp; 

          <label for="Credits">Credits</label>
                <select name="Credits" id="Credits">
                    <option value="0">Select Credit</option>
                    <option value="0.67">1 QtrCr.</option>
                    <option value="1.33">2 QtrCr.</option>
                    <option value="2.00">3 QtrCr.</option>
                    <option value="2.67">4 QtrCr.</option>
                    <option value="3.33">5 QtrCr.</option>
                    <option value="4.00">6 QtrCr.</option>
                    <option value="4.67">7 QtrCr.</option>
                    <option value="5.33">8 QrtCr.</option>
                    <option value="6.00">9 QtrCr.</option>
                    <option value="6.67">10 QtrCr.</option>
                    <option value="1">1 SemCr.</option>
                    <option value="2">2 SemCr. </option>
                    <option value="3">3 SemCr.</option>
                    <option value="4">4 SemCr.</option>
                    <option value="5">5 SemCr.</option>
                    <option value="6">6 SemCr.</option>
                    <option value="7">7 SemCr. </option>
                    <option value="8">8 SemCr.</option>
                    <option value="9">9 SemCr.</option>
                    <option value="10">10 SemCr.</option>
                  </select>

          Transferrable
          <input name="COM105" type="checkbox" id="COM1" />

Я попробовал это, но это не сработало...

$(function($) {
    $('#CourseMenu select').change(function() {
        var sum = 0;
        $('#CourseMenu select').each(function(idx, elm) {
            sum += parseInt(elm.value, 10);
        });

     $('#total_potential').html(Math.min(sum,72).toFixed(2).replace(".00", ""));
    });
});

3 ответа

Решение

Вы используете parseInt(), который отбрасывает дроби. использование parseFloat() вместо.

$(function($) {
    $('#CourseMenu select').change(function() {
        var sum = 0;
        $('#CourseMenu select').each(function(idx, elm) {
            sum += parseFloat(elm.value);
        });

     $('#total_potential').html(Math.min(sum,72).toFixed(2));
    });
});

parseInt Метод разбирает строки на целые числа (целые числа). Один простой способ преобразовать строку в число в JavaScript с сохранением дробной части - использовать унарный оператор плюс:

sum += +elm.value;

Преимущество / недостаток этого по сравнению с parseFloat является то, что это более строгое: если строка начинается с цифр и сопровождается буквами, как "123abc", это вернет NaN в то время как parseFloat вернет число, которое может быть проанализировано перед буквами.

Вы вызываете parseInt для значений перед вызовом.toFixed(), который превратит эти числа с плавающей запятой в целые. Попробуйте вместо этого "parseFloat", и у вас все будет готово.

Другие вопросы по тегам