惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
量子位
博客园 - 叶小钗
AI
AI
T
Tor Project blog
Forbes - Security
Forbes - Security
W
WeLiveSecurity
博客园_首页
爱范儿
爱范儿
J
Java Code Geeks
B
Blog
G
GRAHAM CLULEY
aimingoo的专栏
aimingoo的专栏
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
有赞技术团队
有赞技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
H
Help Net Security
博客园 - 三生石上(FineUI控件)
C
Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 司徒正美
The Last Watchdog
The Last Watchdog
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
Spread Privacy
Spread Privacy
F
Fortinet All Blogs
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Security Latest
Security Latest
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
Hugging Face - Blog
Hugging Face - Blog

博客园 - 江城2211

【知识总结】数据库的事务、并发与锁管理 基于数据源连接,动态构造JPA上下文EntityManager 【转载】使用了HTTPS为啥还要接口数据加密? RSA加密算法,加解密、签名示例 国密SM2算法,加密、签名示例 【知识总结】JVM线程堆栈中的基础概念解读 【问题记录】JVM进程崩溃(hs_err_pid.log致命错误日志) [问题记录】存在视图依赖的数据表,DDL修改字段比如做扩容等注意事项 【编码技巧】批量校验或处理关联引用数据的优化总结 【问题总结】Garmin路线无法同步和地图坐标偏移的解决办法 【工具推荐】磁盘IO检测工具之Diskspd 【编码技巧】总结一个稳定而高效的方法,将二维关系数据转换为树形结构 【编程技巧】SQL脚本快速生成随机测试数据 【编程技巧】结合JPA通用分页与排序技术,支持百万级以上数据的DML批量处理方案 【使用技巧】CodeDecom.exe批量反编译JAR包+Beyond Compare对比 【问题记录】Cause: java.sql.SQLRecoverableException: No more data to read from socket JDBC与各数据库产品连接的驱动及URL示例 【问题记录】使用PowerDesigner连接数据库并反向工程生成所有表及关系 使用tcpdump抓取网络包,在wareshark查看对应请求及响应的原始报文
大数值的精度与格式化显示问题
江城2211 · 2025-10-28 · via 博客园 - 江城2211

问题描述:

Java后端的默认序列化方法:

  • 当数值过大(如 1000000000000000000.00)或过小(如 0.0000000001)时,会默认使用科学计数法序列化(如 1E+181E-10

JavaScript 原生 Number 类型有安全范围(±9007199254740991),当数值超出这个范围时:

  • 原生 JSON.parse() 会自动截断末尾数字(精度丢失);
  • 原生 JSON.stringify() 会将大整数转为科学计数法(如 1234567890123456789 变为 1.2345678901234568e+18

解决方法:

1、Java后端序列化时,可通过指定序列化格式的配置,避免BigDecimal被序列化为科学计数法,确保以 “普通数字字符串” 形式输出(即 plain format)

  • SerializerFeature.WriteBigDecimalAsPlain 是Fastjson用于控制BigDecimal类型序列化格式的核心配置项
  • SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN 是Jackson用于控制BigDecimal类型序列化格式的核心配置项

public static void main(String[] args) throws Exception {

    // Jackson序列化处理的关键配置

    ObjectMapper om = new ObjectMapper();

    om.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN,true);

    // om.enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN);

    BigDecimal b = new BigDecimal("0.0000000000123");

    String str1 = om.writeValueAsString(b);

     // Fastjson序列化处理decimal的关键配置

    String str2= JSON.toJSONString(b, SerializerFeature.WriteBigDecimalAsPlain);

     System.out.println();

}

2、WEB前端可引入json-bigint

JSONbig 是一个专门用于处理大整数 / 大数值的 JSON 解析器和序列化工具,核心解决 JavaScript 原生 JSON 处理超大数值时的精度丢失问题。

  • JSONbig.parse(jsonStr, [options]):解析 JSON 字符串,超大数值会被转为 BigInt 类型;
  • JSONbig.stringify(value, [replacer], [space]):序列化值,BigInt 类型会被转为完整数字字符串(而非科学计数法)。

import JSONbig from 'json-bigint'

const str = '{ "id": 1253585734669959168 }'

console.log(JSON.parse(str)) // 1253585734669959200

// 它会把超出 JS 安全整数范围的数字转为一种类型为 BigNumber 的对象

// 我们在使用的时候需要把这个 BigNumber.toString() 就能得到原来正确的数据了

console.log(JSONbig.parse(str))

// 对于JSONbig 它在处理数据时,会自动识别其中的 大数, 并以数组的格式保存起来

console.log(JSONbig.parse(str).id.toString()) // 1253585734669959168