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

推荐订阅源

The Last Watchdog
The Last Watchdog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
S
Schneier on Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Recorded Future
Recorded Future
I
Intezer
云风的 BLOG
云风的 BLOG
博客园 - Franky
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
T
Tenable Blog
The Hacker News
The Hacker News
T
The Blog of Author Tim Ferriss
Attack and Defense Labs
Attack and Defense Labs
D
DataBreaches.Net
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
The Register - Security
The Register - Security
B
Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
The Cloudflare Blog
Webroot Blog
Webroot Blog
W
WeLiveSecurity
H
Heimdal Security Blog
博客园 - 三生石上(FineUI控件)
V
Vulnerabilities – Threatpost
G
Google Developers Blog
O
OpenAI News
V
V2EX
罗磊的独立博客
博客园_首页
N
News | PayPal Newsroom
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
TaoSecurity Blog
TaoSecurity Blog
Cloudbric
Cloudbric
H
Hacker News: Front Page
博客园 - 叶小钗
T
Tor Project blog
AI
AI

博客园 - 江城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