当我从客户端向服务器发送数据时,我正在使用的框架(angularjs)使用JSON.stringify()
将数据转换为JSON。 (它可能使用angular.toJson()
,但是使用JSON.stringify()
来完成工作。)我猜测stringify函数调用下面的toString()
...
问题在于,用科学记数法写出非常小且非常大的值。这对我来说是一个问题,因为服务器很难确定如何处理该值,从而导致保存数据的问题。我想将我的对象字符串化为十进制表示,例如.0000004
代替4e-7
。
这可能吗?是否可以全局执行此操作,以便我不必修改每个POST到数据库?
答案 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 位小数精度。