• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

打字稿减法不按预期方式工作

angular 来源:Simos Fasouliotis 5次浏览

我有一个包含增值税的全部金额,我想分离净价格和增值税。打字稿减法不按预期方式工作

这个例子的最终价格是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' }} 
    

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)