2016-08-24 19 views
4

我已經在一些數據通過這導致我需要的價值,這是目前一個字符串,它是「0.00」談到JSON對象值成十進制數計算

結果的外部JSON網址拉着我的應用程序後, .data.app_payamount =「0.00」

當我將字符串轉換爲數字並計算一個值時,我只返回一個零件號而不是用於貨幣的完整十進制值。 enter image description here enter image description here

所以payamount顯示適用於貨幣的支持十進制數我如何修改這個代碼?

 var deferred = $q.defer(); 
     var results = response.data; 
     var urlStart = 'http://exmaple.com/api'; 
     if (response.config.url.startsWith(urlStart)) { 
      angular.forEach(results, function(result, key) { 
       result.data.CardFee = 2.00; 
       result.data.app_bookingfee = result.data.CardFee; 
       result.data.app_payamount = +result.data.app_subtotal + +result.data.app_handling + -result.data.app_discount + +result.data.app_adjustment + +result.data.app_bookingfee; 
      }); 
+1

使用'toFixed'例如'var newNum = oldNum.toFixed(2);' –

+0

我認爲要做例如'+ result.data.app_subtotal'轉換爲一個不是浮點數的整數,如果你需要小數,這就是你想要的。 所以當你從字符串轉換時,你可能需要使用'parseFloat(+ result.data.app_subtotal)'或類似的東西。 –

回答

0

嘗試()在這裏使用Number.toFixed。

 var deferred = $q.defer(); 
    var results = response.data; 
    var urlStart = 'http://exmaple.com/api'; 
    if (response.config.url.startsWith(urlStart)) { 
     angular.forEach(results, function(result, key) { 
      result.data.CardFee = 2.00; 
      result.data.app_bookingfee = result.data.CardFee; 
      result.data.app_payamount = +result.data.app_subtotal + +result.data.app_handling + -result.data.app_discount + +result.data.app_adjustment + +result.data.app_bookingfee; 
      result.data.app_payamount = result.data.app_payamount.toFixed(2); 
     }); 
+0

哎呀,我遲到了。那麼,你有它。答案是一致的'number.toFixed(2)'! – kennasoft

+0

上面的這些計算是在app.js的AngularJS的工廠內完成的。當我嘗試從我的控制器中的另一個功能訪問它們時,它將拉出payamount的原始值。有沒有一種方法可以讓result.data.app_payamount.toFixed(2);您已發佈的代碼在全球範圍內可用。 – me9867

+0

你可以把最後的值放在'$ window'對象中,但這是不好的做法。隨意就此提出另一個問題,因爲它與您的原始問題沒有直接關係,並且可能需要您展示更多代碼。 – kennasoft

0

使用number.toFixed(2)

var n = 2; 
var nStringInteger = n.toFixed(0); // "2" 
var nString1Decimal = n.toFixed(1); // "2.0" 
var nString2Decimal = n.toFixed(2); // "2.00" 
1

在JS,你可以指定這樣的數字位數:

n = n.toFixed(2); 
0

使用parseFloattoFixed

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
<p>Click the button to parse different strings.</p> 
 

 
<button onclick="myFunction()">Try it</button> 
 

 
<p id="demo"></p> 
 
<p id="demo2"></p> 
 
<script> 
 
function myFunction() { 
 
    var a = parseFloat("10.3265"); 
 
    var b = parseFloat("10.00"); 
 
    var c = parseFloat("10.33"); 
 
    var n = a + b + c; 
 
    document.getElementById("demo").innerHTML = n; 
 
    document.getElementById("demo2").innerHTML = n.toFixed(2); 
 
} 
 
</script> 
 

 
</body> 
 
</html>

0

使用以下貨幣指令適用小數。

app.directive('currency', function ($filter, $locale) { 
    return { 
     require: 'ngModel', 
     scope: { 
      min: '=min', 
      max: '=max', 
      ngRequired: '=ngRequired' 
     }, 
     link: function (scope, element, attrs, ngModel) { 

      function clearValue(value) { 
       value = String(value); 
       var dSeparator = $locale.NUMBER_FORMATS.DECIMAL_SEP; 
       var clear = value.match(/[\+\-0-9\.]/g); 
       clear = clear ? clear.join("") : 0; 
       return clear; 
      } 

      ngModel.$parsers.push(function (viewValue) { 
       cVal = clearValue(viewValue); 
       return parseFloat(cVal); 
      }); 

      element.on("blur", function() { 
       if (isNaN(ngModel.$modelValue)) { 
        ngModel.$modelValue = 0; 
        element.val($filter('currency')(clearValue(ngModel.$modelValue))); 
       } 
       else { 
        element.val($filter('currency')(ngModel.$modelValue)); 
       } 
      }); 


      ngModel.$formatters.unshift(function (value) { 
       return $filter('currency')(value); 
      }); 

      scope.$watch(function() { 
       return ngModel.$modelValue 
      }, function (newValue, oldValue) { 
       runValidations(newValue) 
      }) 

      function runValidations(cVal) { 
       if (!scope.ngRequired && isNaN(cVal)) { 
        return 
       } 
       if (scope.min) { 
        var min = parseFloat(scope.min) 
        ngModel.$setValidity('min', cVal >= min) 
       } 
       if (scope.max) { 
        var max = parseFloat(scope.max) 
        ngModel.$setValidity('max', cVal <= max) 
       } 
      } 
     } 
    } 
});