Javascript 如何将数字显示在小数点后2位,而将其存储在小数点后4位
我正在做一个项目,我们需要做一些精确的数字计算 但我们也必须以良好的格式向用户显示数字 下面是HTML代码Javascript 如何将数字显示在小数点后2位,而将其存储在小数点后4位,javascript,angularjs,Javascript,Angularjs,我正在做一个项目,我们需要做一些精确的数字计算 但我们也必须以良好的格式向用户显示数字 下面是HTML代码 {{getTotalStocksValue()}}% 再分配 我们显示一些股票及其价值,并且可以手动更改股票的价值。 我们使用getTotalStocksValue()函数显示范围内股票价值的总和。 “重新分配”按钮将重新分配股票价值,使总价值达到100% 要求在输入中以2位小数显示库存值 但是我们也应该将股票值保留在4个小数点中,因为我们需要它来在getTotalStocksValu
{{getTotalStocksValue()}}%
再分配
我们显示一些股票及其价值,并且可以手动更改股票的价值。
我们使用getTotalStocksValue()
函数显示范围内股票价值的总和。
“重新分配”按钮将重新分配股票价值,使总价值达到100%
要求在输入中以2位小数显示库存值
但是我们也应该将股票值保留在4个小数点中,因为我们需要它来在getTotalStocksValue
函数中执行更精确的计算。
例如,如果我们有3只股票,每只股票的价值为33.33
总数为99.99,而如果用户将每个股票的股票值更改为33.3333,则总数应四舍五入为100(如果为99.9999)。
我不知道在Angular中实现这一点是否可行。
我唯一的想法是将输入中的值显示为小数点后4位,并将它们显示为小数点后2位的span或div。
有什么想法或建议吗?只需使用官方语言即可
yourname | number:'1.2-2'
将始终显示至少一个整数位的数字,并且始终显示两个小数 尝试使用
let parsedValue = parseFloat(number).toFixed(4);
现在,数字中的值将四舍五入到小数点后4位,并使用角度十进制管道在视图中显示“数字”
number | number:'1.2-2'
希望这有帮助我认为它需要一个指令,将值作为副本处理 您可以将
替换为上面的
标记,其中插入了本地固定小数ng模型
:
<div ng-repeat="stock in stocks">
<stock-value value="stock.value"></stock-value>
</div>
指令:
.directive('stockValue', function($compile) {
return {
restrict: 'E',
template: '<input type="text" data-numeric-input-directive>',
replace: true,
scope: {
value: '='
},
controller: function($scope) {
$scope.localModel = undefined
},
link: function link(scope, element, attrs) {
scope.localModel = parseFloat(scope.value || 0).toFixed(2);
if (!element.attr('ng-model')) {
element.attr('ng-model', 'localModel');
$compile(element)(scope);
}
scope.$watch('localModel', function(newVal, oldVal) {
if (!oldVal || newVal === oldVal) return
scope.value = parseFloat(newVal).toFixed(4);
})
}
}
});
指令('stockValue',函数($compile){
返回{
限制:'E',
模板:“”,
替换:正确,
范围:{
值:'='
},
控制器:功能($scope){
$scope.localModel=未定义
},
链接:功能链接(范围、元素、属性){
scope.localModel=parseFloat(scope.value | | 0).toFixed(2);
如果(!element.attr('ng-model')){
attr('ng-model','localModel');
$compile(元素)(范围);
}
作用域:$watch('localModel',函数(newVal,oldVal){
如果(!oldVal | | newVal==oldVal)返回
scope.value=parseFloat(newVal).toFixed(4);
})
}
}
});
请参见此链接
用户看到一个两位小数的固定值,原始值不会被截断,但如果用户输入一个新值,旧值将被覆盖到最多4位小数 尝试使用筛选器
{{getTotalStocksValue()| number:2}}
(或具有特定规则的自定义筛选器),它在此处重复:[他希望以2位小数显示ng模型值,但希望以4位小数保存。管道不会修改实际值,因此将始终以其拥有的小数位数保存。唯一改变的是显示方式
.directive('stockValue', function($compile) {
return {
restrict: 'E',
template: '<input type="text" data-numeric-input-directive>',
replace: true,
scope: {
value: '='
},
controller: function($scope) {
$scope.localModel = undefined
},
link: function link(scope, element, attrs) {
scope.localModel = parseFloat(scope.value || 0).toFixed(2);
if (!element.attr('ng-model')) {
element.attr('ng-model', 'localModel');
$compile(element)(scope);
}
scope.$watch('localModel', function(newVal, oldVal) {
if (!oldVal || newVal === oldVal) return
scope.value = parseFloat(newVal).toFixed(4);
})
}
}
});