你们前端金额元分转换的时候不会丢失精度吗,怎么解决的
例如前端的表单的单位是元
,转换成分
后提交的后端,转换成分
的过程(amount * 100)。
假如金额是0.58
,乘以100
后取整却变成了57
。
这样就尴尬了,原本用户要充值0.58
元的,结果后端收到的却是57
分。
php 有高精度函数库 bcmath,js 也有吧,喊前端用高精度函数库算钱
计算机在计算时,会先把十进制小数转换成二进制小数,转换规则是
乘 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 的元素就是整数的字符串,最后用
+
操作符把字符串转换成整数。一般设计金额的字段,可在表中存入Int类型的分,可参考微信支付的金额字段,用到元时/100即可
让前端也使用计算函数就好
数据库中单位以 分 存储
先乘100
不知道你是不是想要这个 浮点数四则运算
php 有个bc库 直接用那个就好了
用四舍五入,不要直接转换成 int,直接转换是向下取整的