使用 AngularJS 的 $http.get() 处理 64 位数字

问题描述 投票:0回答:2

在我的 Angular 应用程序中,我正在向使用 json 对象响应的 URL 发出 $http.get() 请求。该对象包含一个偶尔非常大的值(例如 9106524608436223400)。查看 Chrome 中的网络分析器,我可以看到该数字正常下降,但是当 $http.get() 的回调命中时,该数字会有所损坏。我认为这是因为数字非常大而不是字符串。有什么方法可以让 Angular 正确处理此响应,或者我是否需要将服务器的输出包装为字符串?谢谢。

javascript angularjs guid
2个回答
3
投票

JavaScript 中的数字是双精度浮点数字。这意味着它们只能处理高达 52 位的全精度整数。

任何用于解析将数字表示为 JavaScript 中常规数字的 JSON 的代码都无法为您提供未更改的值。

JSON 标准 没有对数字的范围或精度指定任何限制。然而,由于 JSON 基于 JavaScript 语法的子集,因此有人可能会争辩说,该格式不支持 JavaScript 可以表示的数字之外的数字。

要安全地保持值不变,您需要将其作为字符串放入 JSON 中,或将其拆分为两个或更多较小的数字。


0
投票

在尝试通过 JSON 从 Asp.Net C# 后端发送

UInt64
字段到我的 Angular 前端时,我遇到了类似的问题。收到的值四舍五入为最小的 3 位有效数字。

4070661594142490595 => 4070661594142490600

我能够使用设置为“

WriteAsString
”的 System.Text.Json.Serialization.JsonNumberHandling 属性来解决它。

[Serializable]
public class MyStruct
{
    [JsonNumberHandling(JsonNumberHandling.WriteAsString)]
    public UInt64 ID { get; set; } = 0;
    public int Data{ get; set; } = 0;
}

在 Angular 方面,当通过

http.get
接收 JSON 时,我使用
BigInt
作为相应的属性。

export interface MyStruct
{
    readonly ID: BigInt;
    readonly Data: number;
}
© www.soinside.com 2019 - 2024. All rights reserved.