2017-01-02 46 views
0

甚至parseFloat方法之后在下面的表达式+运算符concatinating而添加

parseFloat((($scope.Product.cost/100) * $scope.Product.profit) + $scope.Product.cost); 

+运算符concatinating和i的值期望它执行加法。

+0

这是因为你有一些字符串值,有分析所有单独 –

回答

2

...即使parseFloat方法

的表达+部分是parseFloat后不,这是parseFloat之前。

你可能想:

(($scope.Product.cost/100) * $scope.Product.profit) + parseFloat($scope.Product.cost); 

注意cost在上面是隐含转换为当你在/100表达式中使用的数字,但你明确parseFloat其他地方将其转换。这两件事情并不完全一样。

我可能更愿意进行转​​换,然后计算:

var cost = parseFloat($scope.Product.cost); // or +$scope.Product.cost 
var profit = parseFloat($scope.Product.profit); // or +$scope.Product.profit 
var result = ((cost/100) * profit) + cost; 

为隐含字符串到数字的转换与parseFloat(及其他)之间的差异破败见this answer


旁注:你并不需要一些你正在使用的括号的,一并变换当时计算的最后一行上面可能是:

var result = (cost/100) * profit + cost; 

...因为*具有比+更高的优先级。但额外的()是无害的。每个在你的表达号码的变量

+0

哈!迷死... –

2

转换通过应用+单一运营商对他们每个人:

+$scope.Product.cost/100 * +$scope.Product.profit + +$scope.Product.cost; 

正如评论指出的那样,胁迫float是隐含表达的第一部分由/*运营商,但并不因此对于操作者+,这将迫使第一数值结果为字符串除非第二个参数首先被转换为数量以及。

所以前两个+单一的运营商是不是真的有必要。

+1

点取,@ T.J.Crowder。 – trincot