Angular.js中的数字递增

时间:2014-04-28 09:07:30

标签: javascript angularjs increment

我正在尝试构建一个计算销售指标的应用。我的构建遇到了一个不寻常的问题。

应用程序的一部分允许用户将变量增加/减少5%,然后查看这将如何影响整体指标。它还允许用户查看百分比增加/减少。

我的功能大致按预期工作,但是如果我在输入中输入一个低于20的数字然后尝试用增量功能增加它,它只增加一次然后停止。

如果输入输入的数字是20或更大,它会以预期的方式递增。

下面是我的角度代码:

function controller ($scope) {
    $scope.firstNumber = 0;
    $scope.firstPercent = 0;

    $scope.increase = function(id) {

        var A = parseInt(id);
        var B = A * 5/100;    
        var C = 0;

        var C = A + B;

        if (id === $scope.firstNumber) {
            $scope.firstNumber = C;
            $scope.firstPercent = $scope.firstPercent + 5;
        } 
    };

    $scope.decrease = function(id) {

        var A = parseInt(id);
        var B = A * 5/100;    
        var C = 0;

        var C = A - B;

        if (id === $scope.firstNumber) {
            $scope.firstNumber = C;
            $scope.firstPercent = $scope.firstPercent - 5;
        } 
    };

我看不出我的数学有什么问题,我的想法是,也许我正以错误的方式接近角度。但是我不确定。

我已经整理了一个显示完整代码的小提琴。

jsFiddle

3 个答案:

答案 0 :(得分:0)

我已经更新了小提琴以使用parseFloat。好像数字正在递增。

var A = parseFloat(id);

http://jsfiddle.net/kjDx7/1/

它使用20以上值的原因是它只是在每次尝试增加时读取小数点前的部分。所以20变成了21和22.05,依此类推。只要小数点前的值不断变化,就会显示不同(但不正确)的答案。

另一方面,10分为10.5,解析时产生10分。正如你所看到的,这个循环持续不断。

答案 1 :(得分:0)

您遇到此问题的原因是因为小于或等于20的任何事物的5%小于或等于1.

当您parseInt()该值时,您总是会再次使用相同的数字。

以15为例。

15%的5%= 15.75

parseInt()之后,您再次获得值15。

每次使用相同的值来递增/递减。

因此,对于低于20的值,您不会得到任何更改。

正如@Akash建议的那样,使用parseFloat()代替 - 或者为什么即使你得到的值仍然是浮动的呢

答案 2 :(得分:0)

我做了一个小提琴。我不完全确定你想要达到什么目的。

选择look at this fiddle

 $scope.increase = function() {

    $scope.firstPercent = $scope.firstPercent + 5;

    var A = $scope.firstNumber;
    var B = (A / 100) * $scope.firstPercent;
    var C = A + B;

    $scope.firstNumberWithPercent = C;
};

<强>更新

发帖后,我看到问题已经回答了。但这是你真正想要的吗?当您点击增加时,输入字段中的数字需要5%的折扣。没关系,但是当你在那之后达到减少时,同一领域的数字需要5%的折扣。所以你的出发点是不同的。

100 + 5/100 = 105
105 - 5/105 = 99,75