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

时间:2015-07-15 19:14:23

标签: javascript json angularjs

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

问题在于,用科学记数法写出非常小且非常大的值。这对我来说是一个问题,因为服务器很难确定如何处理该值,从而导致保存数据的问题。我想将我的对象字符串化为十进制表示,例如.0000004代替4e-7

这可能吗?是否可以全局执行此操作,以便我不必修改每个POST到数据库?

1 个答案:

答案 0 :(得分:0)

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

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 位小数精度。