角js添加两个数字问题

时间:2013-03-26 22:36:20

标签: javascript angularjs

我有使用angular js的代码:

<!DOCTYPE html >
<html>
<head>
    <title>Untitled Page</title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>
    <script type="text/javascript">
        function TodoCtrl($scope) {
            $scope.total = function () {
                return $scope.x + $scope.y;
            };

        }
    </script>
</head>
<body>
   <div ng-app>
  <h2>Calculate</h2>

  <div ng-controller="TodoCtrl">
    <form>
        <li>Number 1: <input type="text" ng-model="x" /> </li>
        <li>Number 2: <input type="text" ng-model="y" /> </li>
        <li>Total <input type="text" value="{{total()}}"/></li>       
    </form>
  </div>
</div>

</body>
</html>

我可以进行乘法,除法和减法但是为了加法,代码只是连接x和y值(即如果x = 3且y = 4,则总数为34而不是7)

我做错了什么?

7 个答案:

答案 0 :(得分:19)

如果确实如此,那么正在发生的事情是将x和y传递的值视为字符串并连接。你应该做的是使用parseInt

将它们转换为数字
return parseInt($scope.x) + parseInt($scope.y);

或者如果您更喜欢简洁

return $scope.x*1 + $scope.y*1;

答案 1 :(得分:7)

你想要这个:

   return parseFloat($scope.x) + parseFloat($scope.y);
当你有2个字符串时,

+会覆盖字符串连接。您需要明确地将它们转换为整数或浮点数。如果可能的话,-*/都将转换为数字。

答案 2 :(得分:1)

以正确的方式添加浮点数

 $scope.Total = parseFloat($scope.firstValue) + parseFloat($scope.secondValue);
 $scope.Total = parseFloat($scope.Total.toFixed(2));

如果应用了与ng-model的绑定,$ scope.Total现在将在视图中正确显示 例如,如果你有

$scope.firstValue = 10.01;
$scope.firstValue = 0.7;

$scope.Total = parseFloat($scope.firstValue) + parseFloat($scope.secondValue);

变量$scope.Total将是10.709999999999999,这是不正确的! 添加parseFloat对于正确的值是不够的。 但是如果你申请

$scope.Total = parseFloat($scope.Total.toFixed(2));

该值将正确显示:$scope.Total = 10.71

小心javascript中的浮点数

答案 3 :(得分:1)

这是因为连接优先于加法运算或加号(+)运算符。 因为,减号运算符( - )工作正常,这是一个简单的黑客!

<script type="text/javascript">
    function TodoCtrl($scope) {
        $scope.total = function () {
            //Subtracting a Zero converts the input to an integer number
            return (($scope.x - 0) + ($scope.y - 0));
        };

    }
</script>

你也可以这样做:

<form>
    <li>Number 1: <input type="text" ng-model="x" /> </li>
    <li>Number 2: <input type="text" ng-model="y" /> </li>
    <li>Total <input type="text" value="{{(x-0) + (y-0)}}"/></li>       
</form>

答案 4 :(得分:1)

将输入类型设为数字,因为它是加法运算

<input type="text" ng-model="x" />
<input type="text" ng-model="y" />

答案 5 :(得分:0)

要将两个数字加在一起,我将解析整数字符串并检查null:

function TodoCtrl($scope) {
    $scope.total = function() {
        var firstNum = parseInt($scope.firstNum) 
        var secondNum = parseInt($scope.secondNum);

        if (!firstNum)
            firstNum = 0;
        if (!secondNum)
            secondNum = 0;

        return firstNum + secondNum;
    }
}

答案 6 :(得分:0)

我建议您将输入的类型更改为&#34; number&#34;然后,您将无需解析它,angular会自动将其转换为interger。我做了它并且它有效,没有范围,但只是声明你的{{total}}