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