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

Javascript 强制JSON.stringify使用十进制表示法,javascript,json,angularjs,Javascript,Json,Angularjs,当我从客户端向服务器发送数据时,我使用的框架(angularjs)使用JSON.stringify()将数据转换为JSON。(它可能使用angular.toJson(),但它使用JSON.stringify()来完成这项工作。)我猜下面的stringify函数调用toString() 问题是,非常小和非常大的值都是用科学符号表示的。这对我来说是个问题,因为服务器很难确定如何处理该值,从而导致保存数据时出现问题。我希望将对象字符串化为十进制表示,例如.0000004而不是4e-7 这可能吗?是否可

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


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


这可能吗?是否可以全局执行此操作,这样我就不必修改数据库中的每个帖子?

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

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

“服务器很难确定如何处理该值”
4e-7
是一个非常好的数字,它的具体含义与
0.0000004
相同。你的服务器端JSON工具是什么?我刚刚在chrome下测试过,JSON.stringify不会在下面调用toString<代码>JSON.stringify({toString:function(){return“foo”;}})返回
“{}”
c#-JavaScriptSerializer正在将值转换为对象。然后我把它放到一个数据表中,我必须猜测数据类型。数值的科学表示法是显式有效的JSON。如果您的服务器端JSON解析器无法正确地将该表示形式转换为某种数字形式,那么我会说它是一个非功能性JSON解析器。还要注意,无论您的JSON解析器从JSON中的数字值构造什么数字类型,几乎100%可以肯定,无论输入值是否采用科学记数法,都是同一类型。整数和非整数的处理方式可能不同,但如果解析JSON后,
0.0000004
4e-7
的结果与其他值完全相同,我会非常惊讶。