2017-01-02 45 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