ObjectNode 的科学计数法问题
2021/11/8 22:40:07
本文主要是介绍ObjectNode 的科学计数法问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景
项目中需要手动生成 JSON 并返回,查阅资料发现,可以直接使用 Spring Boot 绑定的 Jackson 中的 ObjectNode
实现。
代码
类似的 Controller
代码如下:
@RestController @Slf4j public class JacksonController { @GetMapping("/get/{salary}") public ObjectNode getSalary(@PathVariable("salary")BigDecimal salary) { // 手动生成 JSON ObjectMapper objectMapper = new ObjectMapper(); ObjectNode objectNode = objectMapper.createObjectNode(); objectNode.put("salary", salary.add(BigDecimal.valueOf(200))); return objectNode; } @PostMapping("/post") public ObjectNode getUser() { BigDecimal salary = BigDecimal.valueOf(200D); // 手动生成 JSON ObjectMapper objectMapper = new ObjectMapper(); ObjectNode objectNode = objectMapper.createObjectNode(); objectNode.put("salary", salary.add(BigDecimal.valueOf(200))); return objectNode; } }
现象
项目启动后,浏览器发送 GET 请求 /get/200
,返回的 salary 为 400
。
但是使用 Postman 发送 POST 请求 /post
,返回的 salary 却是 4E+2
。
分析
ObjectNode
对象调用 put()
方法,设置 BigDecimal
值的时候,会调用 BigDecimal
的 stripTrailingZeros()
方法,该方法又会调用本类的 createAndStripZerosToMatchScale()
将值转换成科学计数法:
无论 GET 请求还是 POST 请求,在 return objectNode;
的时候,其 salary 都还是 4E+2
,怎么显示的返回值不一样了呢。
GET 请求返回值
自始至终都是 4E+2
,不知道为什么浏览器显示的返回值是 400
。
然后我又用 Postman 发送了一下 GET 请求 /get/200
,返回的确实是 4E+2
。
浏览器按下 F12 出现开发者工具,重新发送一次 GET 请求,很明显看到响应的确实是 4E+2
:
这说明浏览器没有问题,那么问题应该就出在浏览器插件 JSON-handle 上了,将该插件关闭,结果如下(另一款插件 JSON格式化工具 的效果):
结论
-
浏览器插件 JSON-handle 自动将科学计数法换算成正常数值串表示。
-
BigDecimal
对象add()
的方法会将结果转换成科学计数法,如果想以正常数值串表示,可以再调用toPlainString()
方法。
这篇关于ObjectNode 的科学计数法问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29Elasticsearch慢查询日志配置
- 2024-05-29揭秘华为如此多成功项目的产品关键——Charter模板
- 2024-05-29海外IDC业务拓展的7大挑战
- 2024-05-29InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!
- 2024-05-29CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!
- 2024-05-29AutoMQ 生态集成 Apache Doris
- 2024-05-292024年IDC行业的深度挖掘:机遇、挑战与未来展望
- 2024-05-29五款扩展组件齐发 —— Volcano、Keda、Crane-scheduler 等,邀你体验
- 2024-05-29AutoMQ 对象存储数据高效组织的秘密: Compaction
- 2024-05-29活动预告|来 GIAC 大会听大数据降本利器:AutoMQ 基于云原生重新设计的 Kafka