减少整数工作,相同的增加整数不是

时间:2017-05-14 00:54:44

标签: javascript jquery

增加和减少应该在当前值上加或减0.1。它们设置相同。由于某种原因,减少工作(1.0变为0.9,0.8等)但增加不会(1.0变为1.00.1),就好像它连接一个字符串一样。

我已尝试使用parseInt和parseFloat,但在增加new_value = current_value + 0.1时没有运气,但减少确实有效new_value = current_value - 0.1

我希望两者都能按照设置的方式工作。

HTML:

<button data-direction="increase">increase</button>
<button data-direction="decrease">decrease</button>
<input value="1.0" />

JS:

$(function() {
   var button = $('button');

   button.click(function() {
     var button = $(this);
     var direction = button.data('direction');

     var input = $('input');
     var current_value = parseFloat( input.val() ).toFixed(1);

     var new_value;

     if (direction=='increase') {
        new_value = current_value + 0.1;
     } else {
        new_value = current_value - 0.1;    
     }

     input.val(new_value);

  });

});

小提琴:

https://jsfiddle.net/6s6w8fyd/

3 个答案:

答案 0 :(得分:1)

.toFixed(1)Number转换为String

在字符串中添加数字时,该数字会隐式转换为字符串,从而将'0.1'字符串添加到结尾。

减法对字符串不起作用,因此它的行为略有不同:字符串将被隐式转换为数字。

您希望在添加或减去后调用.toFixed

答案 1 :(得分:0)

你对这个'问题'的处理过于复杂,可以回到非常简单的代码中。首先更改数据方向的值。

<button data-direction="1">increase</button>
<button data-direction="-1">decrease</button>

如果您始终遵循以下规则:来自视图(html)的所有内容都是字符串,并且需要在进行任何计算之前进行投射,那么您始终是安全的。

您的javascript变为:

$(function() {
   var button = $('button');

   var curr_value = 1; // Set it to what you want your starting value to be

   button.click(function() {
     var button = $(this);

     // direction is an integer now: 1 or -1
     var direction = parseInt(button.data('direction')); 

     // Not 'safe' to directly parse it from the input,
     // in case someone types in non numeric values.
     // Do a check or - even better - make sure non-numeric values can't be 
     // entered.
     var f = $('input');
     // check here
     var input = parseFloat(f); // input is a number here

     // Set the new curr_value
     curr_value = curr_value + (input * direction);

     input.val(curr_value);

  });

});

为了安全起见,我会建立检查输入的值等等......但是请留给你。希望它有所帮助...

答案 2 :(得分:0)

$(function() {
  function decimal(number, boo){
    number = parseFloat(number);
    return +((boo) ? (number + 0.1):(number - 0.1)).toFixed(1);
  }
  var input = $('input');
  $('button').click(function() {
    
    var direction = $(this).data('direction');
    var inputvalue = input.val();
    input.val(decimal(inputvalue, direction=="increase"));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button data-direction="increase">increase</button>
<button data-direction="decrease">decrease</button>
<input value="1.0" />