Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个量程输入同步,始终提供相同的总和_Javascript_Angularjs - Fatal编程技术网

Javascript 多个量程输入同步,始终提供相同的总和

Javascript 多个量程输入同步,始终提供相同的总和,javascript,angularjs,Javascript,Angularjs,所以我试图创建一个页面,在这个页面中,我可以为不同数量的人划分给定的数量。该除法的和必须始终等于初始值 我面临很多困难,因为AngularJS上的范围输入总是返回一个字符串,所以我必须将其转换为浮点,然后将其乘以100,这样我就可以进行计算而不必面对浮点精度问题 另一个问题是,当人员之间的划分不精确时,如100欧元/3,则会给出333333(3)。理想情况下,我想做的是这样的事情:33,33+33,33+33,34 与之前的问题相关,有时我得到的值超过2位小数 您可以找到一个工作示例,在这个示例

所以我试图创建一个页面,在这个页面中,我可以为不同数量的人划分给定的数量。该除法的和必须始终等于初始值

我面临很多困难,因为AngularJS上的范围输入总是返回一个字符串,所以我必须将其转换为浮点,然后将其乘以100,这样我就可以进行计算而不必面对浮点精度问题

另一个问题是,当人员之间的划分不精确时,如100欧元/3,则会给出333333(3)。理想情况下,我想做的是这样的事情:33,33+33,33+33,34

与之前的问题相关,有时我得到的值超过2位小数

您可以找到一个工作示例,在这个示例中,当一个范围输入被更改时,所有其他范围输入以相反的方式更新(当我增加一个范围输入时,其他范围输入必须减少,反之亦然)

注意:范围输入不能通过单击和拖动来工作。您必须单击所需的位置(它们用于触摸设备),并且您只能在禁用“等量”时移动它们

控制器代码如下:

angular.module('ionicApp')   
.controller('HomeTabCtrl', function($scope) {
  $scope.stuff = {
    persons: [],
    max: 100,
    equal: true

  };

  $scope.addPerson = function(){
    var person = {
      expenseValue: 0   
    };

    $scope.stuff.persons.push(person);
    $scope.recalcTotal(-1);
  };

  $scope.recalcTotal = function(index){
    var i = 0;
    var length = $scope.stuff.persons.length;

    if($scope.stuff.equal){

      var equalExpense = $scope.stuff.max / length;

      for(i = 0; i < length; i++){
        $scope.stuff.persons[i].expenseValue = equalExpense;
      }

    }else if(index > 0){
      var total = 0;
      var delta = 0;
      var i = 0;


      for (i = 0; i < length; i++) {
        $scope.stuff.persons[i].expenseValue = parseFloat($scope.stuff.persons[i].expenseValue) * 100;
        total += $scope.stuff.persons[i].expenseValue;
      }

      delta = ($scope.stuff.max * 100 - total)/length;


        for (i = 0; i < length; i++) {
          if(i !== index){
            $scope.stuff.persons[i].expenseValue = _calcNewValue(delta, $scope.stuff.persons[index].expenseValue, $scope.stuff.persons[i].expenseValue);
          }
        }
        $scope.stuff.persons[index].expenseValue = $scope.stuff.persons[index].expenseValue / 100;
      }
  };

  function _calcNewValue(delta, value, userExpense){

    var newValue =  userExpense + delta;


    if (newValue < 0 || value === $scope.stuff.max * 100){
      newValue = 0;
    }
    else if (newValue > $scope.stuff.max * 100){
      newValue = $scope.stuff.max * 100;
    }

    return newValue / 100;
  }
});
angular.module('ionicApp'))
.controller('HomeTabCtrl',函数($scope){
$scope.stuff={
人员:[],
最高:100,
相等:正确
};
$scope.addPerson=函数(){
个人变量={
费用价值:0
};
$scope.stuff.person.push(person);
$scope.recalcotal(-1);
};
$scope.recalcotal=函数(索引){
var i=0;
变量长度=$scope.stuff.persons.length;
if($scope.stuff.equal){
var equalExpense=$scope.stuff.max/length;
对于(i=0;i0){
var合计=0;
var-delta=0;
var i=0;
对于(i=0;i$scope.stuff.max*100){
newValue=$scope.stuff.max*100;
}
返回newValue/100;
}
});