当我将数据从客户端发送到服务器时,我使用的框架 (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/