你们前端金额元分转换的时候不会丢失精度吗,怎么解决的

例如前端的表单的单位是,转换成后提交的后端,转换成的过程(amount * 100)。
假如金额是0.58,乘以100后取整却变成了57

你们前端金额元分转换的时候不会丢失精度吗,怎么解决的

你们前端金额元分转换的时候不会丢失精度吗,怎么解决的

这样就尴尬了,原本用户要充值0.58元的,结果后端收到的却是57分。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 9

php 有高精度函数库 bcmath,js 也有吧,喊前端用高精度函数库算钱

4年前 评论

计算机在计算时,会先把十进制小数转换成二进制小数,转换规则是 乘 2 取整,顺序排列,比如 0.1 被转换成二进制小数后是无限循环的:

0.000 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 (1100)......

其他小数也是一样,最多能保留 64 位, 所以精度会丢失。

对于你这个问题,小数转换成整数的做法简单,并不需要 *100,用下面这种做法:

+0.58.toString().split('.')[1]

先转换成字符串,然后转换成数组,拿到下标为 1 的元素就是整数的字符串,最后用 + 操作符把字符串转换成整数。

4年前 评论
waney 4年前
国服第一拍黄片的 (作者) 4年前

一般设计金额的字段,可在表中存入Int类型的分,可参考微信支付的金额字段,用到元时/100即可

4年前 评论

让前端也使用计算函数就好

4年前 评论

数据库中单位以 分 存储

4年前 评论
zxk

先乘100

4年前 评论
h-o-o (楼主) 4年前
cnguu

不知道你是不是想要这个 浮点数四则运算

4年前 评论

php 有个bc库 直接用那个就好了

4年前 评论

用四舍五入,不要直接转换成 int,直接转换是向下取整的

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!