前端处理long整型精度丢失问题-正则
后端同学抛给了我一串前端处理long精度丢失代码,看不懂这个正则表达式,在线求解下:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
后端同学抛给了我一串前端处理long精度丢失代码,看不懂这个正则表达式,在线求解下:
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
后端懒成这样了么……
就是先把响应当成纯文本处理,先不反序列化。然后正则替换每个“冒号+至少17位整数”(看你之前的问题你们不是16位数么,这块得改一下),变成“冒号+双引号+@rr:+数字+双引号”,然后再把
@rr:
替换没(其实我也没懂为啥要这么分步替换)。下面还有一个正则是替换小数的,把小数也前后加上双引号,步骤跟上面同理。
后面都当成字符串操作就没有所谓精度问题了。但你注意后面你别再给
+value
或者parseInt(value)
转回 number 类型了,那就又丢失精度了。P.S. 这段正则其实有漏洞,就是要求 JSON 的 KeyValue 之间不能有空格才行,它只能替换
{"value":1234567890987654321}
,却不能识别{"value": 1234567890987654321}
……再一个问题是如果你们某个字段本身的值就是冒号+整数这样的形式,它也会给替换掉导致最后结果出错。都是通过正则表达式进行替换操作.
c1例子:
replace(/:\d{17,}/g,':"@rr$&"') :进行全局匹配操作,将 内容形式是 :后面至少17个数字组合 的这种内容形式替换为:"@rr$&" 这种内容
正则中 \s表示匹配空白字符(空格符、制表符、回车符、换行符、垂直换行符、换页符)
replace(/@rr:\s/g,''):进行全局匹配,将内容 @rr:(空格符、制表符、回车符、换行符、垂直换行符、换页符) 全部替换为''.
replace(/@rr:/g,''):进行全局匹配,将内容 @rr: 全部替换为'' .
c2的和c1类似