javascript - 强制 JSON.stringify 使用十进制表示法

当我将数据从客户端发送到服务器时,我使用的框架 (angularjs) 使用 JSON.stringify() 将数据转换为 JSON。 (它可能使用 angular.toJson(),但使用 JSON.stringify() 来完成工作。)我猜 stringify 函数调用 toString () 下面...

问题是非常小和非常大的值然后用科学记数法书写。这对我来说是个问题,因为服务器很难确定如何处理该值,从而导致保存数据时出现问题。我希望将我的对象字符串化为十进制表示形式,例如.0000004 而不是 4e-7

这可能吗?是否可以在全局范围内执行此操作,这样我就不必修改对数据库的每个 POST?

最佳答案

这可能不适用于所有情况,但我用过

JSON.stringifyDecimal = function(...args) {
    return JSON.stringify(...args).replace(/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,function(match) {
    return (parseFloat(match)).toFixed((!match.toUpperCase().includes("E") ? (match.split('.')[1] || []).length : 20)).replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,'$1');
  });
};

输入:[1.7e-5,5.6666],[1.8e-3,7.211555],[1.9e-2,2.456]

输出:[[0.000017,5.6666],[0.0018,7.211555],[0.019,2.456]]

此实现允许最多 20 位小数的精度。

https://stackoverflow.com/questions/31439110/

相关文章:

php - 如何改进 PHP IMAP 的电子邮件提取

git - 使用仍在审查中的 Cherry pick 推送代码以供审查的工作流

java - 如何在不同网络的 NAT 后面的两个客户端之间建立 TCP 连接?

angularjs - 在剑道下拉列表中选择 "0"作为值的项目

php - DirectAdmin 上的 OPcache php5.5 已禁用

android - Fused Location 如何确定是使用 GPS 还是网络提供商?

javascript - limitTo 过滤前查询过滤的 ng-repeat 数据的长度

java - 反向路由 玩 POST payload

c#-4.0 - 是否有用于验证的设计模式?

xslt - 我们如何使用 jenkins 控制台日志通过和失败计数生成 html 报告?