【问题标题】:Handing Precision of big number in AngularAngular中大数字的处理精度
【发布时间】:2019-07-23 16:29:37
【问题描述】:

我有 .Net Web API,它将从第三方 API 接收到的数据返回给我面向用户的 Angular 应用程序。 当 API 返回像 999,999,999,999,999.99 这样的大数字时,Angular 会将其更改为 10,000,000,000,000,000。我不想四舍五入这个数字,因为它是敏感数据

我想到了一种解决方法来解决这个问题,并为如此庞大的数字保留小数位。解决方法是在将数据发送回 Angular 应用程序之前将数字转换为字符串。实现此目的的两种方法:

  1. 使用一些正则表达式并通过在数字周围放置引号将所有数字字段设为字符串。

  2. 目前,在 .NET API 中,我将第三方 API 的响应作为字符串读取,并将其放入 ContentString 中,然后再将其发送到 Angular 应用程序。我可以定义一个模型,而不是将内容读取为字符串,而在该模型中,我可以将所有数字类型字段定义为字符串。

我想知道这两种方法中哪一种更好。如果有人可以分享一些正确的方法来实现这一点,我将不胜感激。

【问题讨论】:

    标签: angular asp.net-web-api


    【解决方案1】:

    我觉得你可以用BigJS:

    var n = new Big('999999999999999.99');
    

    【讨论】:

    • 我们已经在使用 BigNumber (github.com/MikeMcl/bignumber.js)。问题是当 Angular 的 HttpClient 服务向我们返回转换为 JSON 的响应时,这就是精度发生变化的地方。
    【解决方案2】:

    这是一个 JavaScript 问题,而不是 Angular 特定问题。 JavaScript 数字始终按照国际 IEEE 754 标准存储为双精度浮点数。

    进一步阅读:

    https://www.w3schools.com/js/js_numbers.asp

    例子:

    (function() {
    
        //1000000000000000
        const a = 999999999999999.99
    
        //99999999999999.98
        const b = 99999999999999.99
    
        //999999999999999
        const c = 999999999999999
    
        //'999999999999999.99'
        const d = '999999999999999.99'
    
        console.log(a);
        console.log(b);
        console.log(c);
        console.log(d);
    }
    )();
    
    

    我认为您将很难毫无问题地存储大于 999999999999999 的数字。最好存储为字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 2023-03-06
      • 1970-01-01
      • 2013-06-22
      • 2018-03-13
      • 2015-06-24
      • 2019-05-22
      • 2014-01-19
      相关资源
      最近更新 更多