我正在尝试构建一个计算销售指标的应用。我的构建遇到了一个不寻常的问题。
应用程序的一部分允许用户将变量增加/减少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;
}
};
我看不出我的数学有什么问题,我的想法是,也许我正以错误的方式接近角度。但是我不确定。
我已经整理了一个显示完整代码的小提琴。
答案 0 :(得分:0)
我已经更新了小提琴以使用parseFloat。好像数字正在递增。
var A = parseFloat(id);
它使用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)
我做了一个小提琴。我不完全确定你想要达到什么目的。
$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