js 解析 json 精度丢失怎么处理?

2018-10-31 17:18:46 +08:00
 mentalidade

后端保留两位小数,前端显示却丢失了,查了下,是 js 解析 float 精度丢失。不想在后端改成 string,怎么让前端正确显示。

后端 php 是 float 保留两位小数,转为 json。

    ["money"]=>
    array(3) {
      ["maket_total"]=>
      float(16794.48)
      ["voucher_total"]=>
      string(6) "744.00"
      ["favorable_total"]=>
      float(509.46)
    }

前端接收却是:"money":{"maket_total":16794.48,"voucher_total":"744.00","favorable_total":509.46000000000004}},

7292 次点击
所在节点    程序员
28 条回复
BBCCBB
2018-11-01 10:18:32 +08:00
long 类型 超过 53 还是 54, js 解析也会出问题的, 还是用 string 吧.
BBCCBB
2018-11-01 10:18:55 +08:00
53, 54 位
promise2mm
2018-11-01 11:13:33 +08:00
http://www.css88.com/archives/7340#more-7340
这里有大佬的分析,我司也遇到过
shuang
2018-11-01 11:27:31 +08:00
0.495.toFixed(2)
"0.49"
kran
2018-11-01 11:29:56 +08:00
乘上 10^n 再编码成 json
zjsxwc
2018-11-01 11:32:00 +08:00
php7.1.x 特定小版本的问题,

加一句
```
ini_set('serialize_precision', -1);
```
就行

http://php-symfony.uk/json_encode-producing-unexpected-float-values-in-php-7-1/
msg7086
2018-11-01 11:37:06 +08:00
钱用浮点数这种近似表示法是作大死。只要是近似表示,就会有误差,再怎么都会有。
Jobing
2022-11-05 21:36:44 +08:00
可以用这个开源库解决: https://github.com/jobinben/json-bn

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/503097

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX