Javascript 计算后将JSON对象值转换为十进制数

Javascript 计算后将JSON对象值转换为十进制数,javascript,angularjs,json,Javascript,Angularjs,Json,我已经通过一个外部JSON url为我的应用程序提取了一些数据,该url产生了我所需的值,当前是一个字符串“0.00” result.data.app_payamum=“0.00” 当我将字符串转换为数字并计算一个值时,只返回一个部件号,而不是用于货币的完整十进制值。 如何编辑此代码,使payamount显示适合货币的完整十进制数字 var deferred = $q.defer(); var results = response.data; v

我已经通过一个外部JSON url为我的应用程序提取了一些数据,该url产生了我所需的值,当前是一个字符串“0.00”

result.data.app_payamum=“0.00”

当我将字符串转换为数字并计算一个值时,只返回一个部件号,而不是用于货币的完整十进制值。

如何编辑此代码,使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;
            });
使用
number.toFixed(2)


在js中,您可以像这样指定位数:

n = n.toFixed(2);
尝试在此处使用Number.toFixed()


使用
parseFloat
toFixed


单击按钮以分析不同的字符串

试试看

函数myFunction(){ var a=parseFloat(“10.3265”); var b=浮动汇率(“10.00”); var c=浮动汇率(“10.33”); var n=a+b+c; document.getElementById(“demo”).innerHTML=n; document.getElementById(“demo2”).innerHTML=n.toFixed(2); }
使用以下货币指令应用小数位

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)
                }
            }
        }
    }
});
app.directive('currency',function($filter,$locale){
返回{
要求:'ngModel',
范围:{
最小:'=min',
max:'=max',
ngRequired:'=ngRequired'
},
链接:功能(范围、元素、属性、模型){
函数clearValue(值){
值=字符串(值);
var dsepator=$locale.NUMBER\u FORMATS.DECIMAL\u SEP;
var clear=value.match(/[\+\-0-9\.]/g);
clear=clear?clear.join(“”):0;
返回清晰;
}
ngModel.$parsers.push(函数(viewValue){
cVal=clearValue(视图值);
返回浮点数(cVal);
});
元素上(“模糊”,函数(){
if(isNaN(ngModel.$modelValue)){
ngModel.$modelValue=0;
val($filter('currency')(clearValue(ngModel.$modelValue));
}
否则{
element.val($filter('currency')(ngModel.$modelValue));
}
});
ngModel.$formatters.unshift(函数(值){
返回$filter('currency')(值);
});
范围:$watch(函数(){
返回ngModel.$modelValue
},函数(新值,旧值){
运行验证(newValue)
})
函数运行验证(cVal){
如果(!scope.ngRequired&&isNaN(cVal)){
返回
}
if(scope.min){
var min=parseFloat(scope.min)
ngModel.$setValidity('min',cVal>=min)
}
如果(范围最大值){
var max=parseFloat(scope.max)

ngModel.$setValidity('max',cVal使用
toFixed
例如
var newNum=oldNum.toFixed(2);
我想这样做,例如
+result.data.app_subtotal
转换成整数而不是浮点数,如果需要小数,这就是你想要的。所以你可能需要使用
parseFloat(+result.data.app_subtotal)
或类似,当你从字符串转换时。哎呀,我迟到了。好吧,你看到了。答案是一致的
数字。toFixed(2)
!以上这些计算是在app.js中AngularJS的工厂中进行的。当我尝试从控制器中的另一个函数访问它们时,它会提取payamount的原始值。是否有方法生成result.data.app_payamount.toFixed(2);在您发布的代码中全局可用。您可以将最终值放入
$窗口
对象中,但这是一种不好的做法。请随意提出另一个问题,因为它与原始问题没有直接关系,可能需要您显示更多代码。感谢您的帮助kennasoft为是
        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);
        });
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)
                }
            }
        }
    }
});