JavaScript浮点数间隙性的bug如何解决?

   $(".editor-number__plus").click(function() {
            var n = (Math.round(parseFloat($(this).siblings("input").val())*10)/10)
            n = n + 0.1
            $(this).siblings("input").val(n)
            
          })
      
      
      

初始值为10,使用以上代码点击按钮打印或显示出来的数值是:
10.1
10.2
10.299999999999999
10.4
10.5
10.6
10.7
10.799999999999999
10.9
11
11.1
11.2
11.299999999999999
11.4
11.5
11.6
11.7
11.799999999999999
11.9
12
12.1
12.2
12.299999999999999
12.4
12.5
12.6
12.7
12.799999999999999

请教该如何解决?

阅读 3.9k
5 个回答
$(".editor-number__plus").click(function() {
    var n = Math.round(parseFloat($(this).siblings("input").val())*10)
    var m = n + 1
    $(this).siblings("input").val(m/10)
})
$(".editor-number__plus").click(function() {
    var n = (Math.round(parseFloat($(this).siblings("input").val())*10)/10);
    n = n + 0.1;
    $(this).siblings("input").val(n.toFixed(1));
    })  

OR

$(".editor-number__plus").click(function() {
    var n = (Math.round(parseFloat($(this).siblings("input").val())*10));
    n = (n+1)/10;
    $(this).siblings("input").val(n)
    })      
  1. 不用js进行浮点运算

  2. 必须要用js做的,转成整数,运算结束后再转浮点

改成整数。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题