来自 json 的 BigDecimal 失去精度

BigDecimal from json loses precision

提问人:Han 提问时间:2/16/2023 最后编辑:Dave NewtonHan 更新时间:2/16/2023 访问量:458

问:

网络调用显示后端正在发送以下内容:

"uom" : "EA",
"qty" : 1.123456789012345678

但是当它到达前端时,使用 Console.log:

{ 
  qty: 1.1234567890123457, 
  uom: "EA"
}

为什么 JavaScript 会丢失最后一位数字或截断数字?

该数字在 java 中使用 BigDecimal 表示。前端使用 AngularJs 框架,对后端进行 GET 调用,请求 JSON。

javascript java json angularjs bigdecimal

评论

1赞 Dave Newton 2/16/2023
有关详尽的详细信息,请参阅每个计算机科学家都应该了解的浮点运算知识。如果你需要它精确,不要使用(常规)数字。
1赞 Anonymous 2/16/2023
出于什么目的,您需要比 17 位有效数字更精细的精度?

答:

2赞 phatfingers 2/16/2023 #1

Javascript 浮点数拥有 64 位精度,类似于 Java 中的 a。如果你必须在 Java 中使用 BigDecimal 来扩展超过该精度级别,则需要在 Javascript 中执行类似操作以超出其相似边界。NPM 包 js-big-decimal 可能是你最好的选择,你可以将值作为字符串在 JSON 中传输,以防止 JSON.parse 将它们解释为 Number。double

0赞 Han 2/16/2023 #2

感谢您的帮助。我发现添加

@JsonSerialize(using = ToStringSerializer.class)
public getQty(){
   return this.qty;
}

到 java 域对象解决了这个问题。

评论

0赞 shmosel 2/16/2023
缺少返回类型。