打字稿减法不按预期方式工作
我有一个包含增值税的全部金额,我想分离净价格和增值税。打字稿减法不按预期方式工作
这个例子的最终价格是80.60,增值税是24%。净价和什么是增值税? 答案应该是净价格是65.00,增值税= 15.60。
由于某些原因,typescript计算65.00和15.599999999999994。 目前我不想四舍五入,但结果应该是15.60。 我知道有关于如何计算增值税的其他ansers,但我的问题是非常具体什么是我的代码错误,并生成这个十进制而不是15.60。
这里是我的代码: component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'app-fpa',
templateUrl: './fpa.component.html',
styleUrls: ['./fpa.component.css']
})
export class FpaComponent implements OnInit {
public netPrice:number;
public fpaPercent:number=24;
public fpaValue:number=0;
public totalPrice:number;
public calc(calcType:string = ''){
this.netPrice = this.totalPrice/((this.fpaPercent/100)+1);
this.fpaValue = this.totalPrice - this.netPrice;
}
}
component.html
<mat-form-field> <input [(ngModel)]="netPrice" (keyup)="calc('byNetPrice');" matInput placeholder="Net Price">
</mat-form-field>
<mat-form-field>
<input [(ngModel)]="fpaPercent" (keyup)="calc();" matInput placeholder="% Vat">
</mat-form-field>
<mat-form-field>
<input [(ngModel)]="fpaValue" (keyup)="calc('byFpaValue');" matInput placeholder="Vat Value">
</mat-form-field>
<mat-form-field>
<input [(ngModel)]="totalPrice" (keyup)="calc('byFinalPrice');" matInput placeholder="Final Price" >
</mat-form-field>
回答:
这是因为我们认识到十进制数进行编码,并存储在二进制文件。通常十进制数不能用二进制精确表示,所以会有舍入误差。
看起来你只需要将数字格式化为2位小数。
你有几个选项来做到这一点:
您可以使用内置在JavaScript号方法,
toFixed(2)
:(see MDN docs)在你的控制器逻辑格式化减为2位小数的结果。您可以使用角DecimalPipe在你的控制器逻辑:(see Angular docs)
/*
The Angular DecimalPipe can be more useful that toFixed()
because it has a wider number of formatting options including
the setting both the minimum and maximum number of digits after
the decimal point. In this case it's specified a minimum AND
maximum of 2 decimal places.
Because decimals can be represented differently in different
countries, the DecimalPipe constructor takes a locale.
*/
const locale = 'en-US';
const decimalPipe = new DecimalPipe(locale);
this.fpaValue = decimalPipe.transform(this.totalPrice - this.netPrice, '.2-2');
如果你在你的模板中其他显示fpaValue,那么你可以在模板中使用十进制管:
{{ fpaValue | number:'.2-2' }}
回答:
首先,它不是TypeScript的问题。它的浮点的行为JS:http://floating-point-gui.de/
用途:
this.fpaValue.toFixed(2);
,你会得到你的答案高达2个小数点。
以上是 打字稿减法不按预期方式工作 的全部内容, 来源链接: utcz.com/qa/260210.html