Javascript 计算后将JSON对象值转换为十进制数
我已经通过一个外部JSON url为我的应用程序提取了一些数据,该url产生了我所需的值,当前是一个字符串“0.00” result.data.app_payamum=“0.00” 当我将字符串转换为数字并计算一个值时,只返回一个部件号,而不是用于货币的完整十进制值。 如何编辑此代码,使payamount显示适合货币的完整十进制数字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
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)
}
}
}
}
});