2014-03-02 77 views
2

这里的HTML:增加/由十进制值减少输入

<body> 
    <p> 
     <img src="http://i.imgur.com/yOadS1c.png" id="minus1" width="20" height="20" class="minus"/> 
     <input id="qty1" type="text" value="1" class="qty"/> 
     <img id="add1" src="http://i.imgur.com/98cvZnj.png" width="20" height="20" class="add"/> 
    </p> 

</body> 

这里的JS:

$(function() { 
    $('.add').on('click',function(){ 
     var $qty=$(this).closest('p').find('.qty'); 
     var currentVal = parseFloat($qty.val()); 
     if (!isNaN(currentVal)) { 
      $qty.val(currentVal + 0.1); 
     } 
    }); 
    $('.minus').on('click',function(){ 
     var $qty=$(this).closest('p').find('.qty'); 
     var currentVal = parseFloat($qty.val()); 
     if (!isNaN(currentVal) && currentVal > 0) { 
      $qty.val(currentVal - 0.1); 
     } 
    }); 
}); 

的jsfiddle:http://jsfiddle.net/hMS6Y/30/

当我尝试增加或由0.1降低输入值i我得到了一些奇怪的值:

1.1还行 1.2000000000000002 1.3000000000000003

我该如何让它们看起来如下:1.1,1.2,1.3等等。

+0

https://wiki.theory.org/YourLanguageSucks#Type_System JavaScript是*不*一种高精度的编程语言。你相信0.1加0.2是0.3?错误! JavaScript:'0.1 + 0.2 == 0.3 // false' –

+0

@Jack这篇文章可能会回答为什么OP会得到结果,但并未回答他如何格式化值以按预期显示的问题。 – cpburnz

回答

2

尝试使用像这样

  $(function() { 
     $('.add').on('click',function(){ 
      var $qty=$(this).closest('p').find('.qty'); 
      var currentVal = parseFloat($qty.val()); 
      if (!isNaN(currentVal)) { 
       $qty.val(parseFloat(currentVal + 0.1).toFixed(1)); 
      } 
     }); 
     $('.minus').on('click',function(){ 
      var $qty=$(this).closest('p').find('.qty'); 
      var currentVal = parseFloat($qty.val()); 
      if (!isNaN(currentVal) && currentVal > 0) { 
       $qty.val(parseFloat(currentVal - 0.1).toFixed(1)); 
      } 
     }); 
    }); 
+0

toFixed(1)做到了! – Heihachi

0

在Javascript中出现意想不到的行为很常见,但这是特别恶毒的行为。

10000000000000000 === 10000000000000001

JavaScript没有整数类型,但可以让你觉得它有。 parseInt和parseFloat内置函数,“1”显示为“1”而不显示为“1.0”(如许多语言)的事实对一般的误解有所贡献。

Source


可以使用 Javascript-bignum

1

一个接受的解决方法是将转换为整数数学表达式,然后转换回之后,即

//添加情况下

$qty.val((currentVal*10 + 1)/10); 

//减去壳体

$qty.val((currentVal*10 - 1)/10); 
+0

JavaScript中没有整数类型。 –

+0

这也有效!谢谢 – Heihachi

3

您可以使用 - .toFixed(1)舍它到你想要的小数位:

在这里你去:Fiddle

$(function() { 
$('.add').on('click',function(){ 
    var qty = $(this).closest('p').find('.qty'); 
    var currentVal = parseFloat($(qty).val()); 
    if (!isNaN(currentVal)) { 
     $(qty).val((currentVal + 0.1).toFixed(1)); 
    } 
}); 
$('.minus').on('click',function(){ 
    var qty=$(this).closest('p').find('.qty'); 
    var currentVal = parseFloat($(qty).val()); 
    if (!isNaN(currentVal) && currentVal > 0) { 
     $(qty).val((currentVal - 0.1).toFixed(1)); 
    } 
}); 
});