Javascript toFixed无法正常工作

时间:2017-04-23 10:38:31

标签: javascript html

请看下面的代码。它应该从输入中添加和减去0.1。但是当我点击+按钮时,它会在toFixed(2)函数上出错。为什么这不起作用,当 - 按钮呢?

以下是jsfiddle中的代码。

HTML:

        <div class="input-group">
            <span class="input-group-btn">
                <button type="button" class="iLiter-left-minus btn btn-lg btn-info btn-number" data-type="minus" data-field="">-
                </button>
            </span>
            <input type="number" id="iLiter" class="form-control input-number input-lg" value="0.4" min="0.1" max="10">
            <span class="input-group-btn">
                <button type="button" class="iLiter-right-plus btn btn-lg btn-info btn-number" data-type="plus" data-field="">
                    +
                </button>
            </span>
        </div>

JavaScript的:

        $('.iLiter-right-plus').click(function (e) {
            e.preventDefault();
            var quantity = parseFloat($('#iLiter').val());
            quantity = quantity.toFixed(2);
            if (quantity < 10.0) {
                quantity = quantity + 0.1;
                quantity = quantity.toFixed(2);
                $('#iLiter').val(quantity);
            }
        });
        $('.iLiter-left-minus').click(function (e) {
            e.preventDefault();
            var quantity = parseFloat($('#iLiter').val());
            quantity = quantity.toFixed(2);
            if (quantity > 0.1) {
                quantity = quantity - 0.1;
                quantity = quantity.toFixed(2);
                $('#iLiter').val(quantity);
            }
        });

4 个答案:

答案 0 :(得分:1)

尝试

bwplot(yield ~ variety, data = barley, box.width = 1 / ngroups,
       groups = year, scales = (x = list(rot = 45)),
       par.settings = list(superpose.polygon = list(col = c("green", "red"),
                                                    pch =c (15, 15)),
                         superpose.symbol = list(fill = c("green", "red"))),
       auto.key = list(points = FALSE, rectangles = TRUE, space = "right"),
       panel.groups = function(x, y, ..., group.number) {
         panel.bwplot(x + (group.number - 1.5) / ngroups, y, ...)
       },
       panel = function(...) {
         panel.grid(h = -1, v = 0)
         panel.superpose(...)
       }
) 

quantity = +quantity + 0.1;

在代码中的相应位置。它不适用于“+”按钮,因为“+”也表示字符串连接,quantity = +quantity - 0.1; //(here + is optional) 的结果是字符串"string" + number,字符串没有“toFixed”方法(因为它反映了在控制台错误消息中)而“ - ”运算符将字符串"stringnumber"转换为数字,一切都按预期工作。

答案 1 :(得分:1)

试试

quantity = Number(quantity) + 0.1;

答案 2 :(得分:1)

您正在将浮点数(您刚刚用parseFloat()解析)转换回toFixed(2)的字符串。对于+运算符,您传递的内容类似0.50.1,这不是有效的数字字符串(因此调用'0.50.1'.toFixed(2)时出错)。

在更新HTML值之前调用.toFixed一次(不是在使用值之前):

$('.iLiter-right-plus').click(function (e) {
  e.preventDefault();
  var quantity = parseFloat($('#iLiter').val());
  if (quantity < 10.0) {
    quantity = quantity + 0.1;
    quantity = quantity.toFixed(2);
    $('#iLiter').val(quantity);
  }
});
$('.iLiter-left-minus').click(function (e) {
  e.preventDefault();
  var quantity = parseFloat($('#iLiter').val());
  if (quantity > 0.1) {
    quantity = quantity - 0.1;
    quantity = quantity.toFixed(2);
    $('#iLiter').val(quantity);
  }
});

此处更新了小提琴:https://jsfiddle.net/2fq6bhxs/2/

答案 3 :(得分:1)

请将您的Javascript来源更改为

        $('.iLiter-right-plus').click(function (e) {
            e.preventDefault();
            var quantity = parseFloat($('#iLiter').val());
            quantity = parseFloat(quantity.toFixed(2));
            if (quantity < 10.0) {
                quantity = quantity + 0.1;
                quantity = quantity.toFixed(2);
                $('#iLiter').val(quantity);
            }
        });
        $('.iLiter-left-minus').click(function (e) {
            e.preventDefault();
            var quantity = parseFloat($('#iLiter').val());
            quantity = parseFloat(quantity.toFixed(2));
            if (quantity > 0.1) {
                quantity = quantity - 0.1;
                quantity = quantity.toFixed(2);
                $('#iLiter').val(quantity);
            }
        });

使用.toFixed =&gt;时你的quantity将是一个字符串。 因此,下一个.toFixed将不起作用,因为.toFixed仅适用于数字