葛胖胖的小草屋 一言不合 rm -fr /

float金额转int时候出现的状况

2018-06-21
Cossete

阅读:

PHP
   

场景

与上游银行通对接提交过去的金额通常是int型以分为单位,此时我们需要将以元为单位的金额乘以100再提交过去,但在float转int时候,金额可能会变动造成误差

示例

$value = 39.80;
var_dump($value*100); //输出3980
var_dump(intval($value*100)); //输出3979

改进

先将乘以100的金额转str,再转int(这个方法虽然可行,但不可靠)

//比较原始的方式
$value = 39.80;
$str = (string)($value*100);
var_dump(intval($str)); //输出3980

使用php内置btmatch函数来处理

//更优的方法
$value = 39.80;
$res = bcmul($val,100,0);
var_dump(intval($res)); //输出3980


Similar Posts

Comments