减去两个数字不存储在数据库中

时间:2017-02-22 08:06:31

标签: php laravel

我的数据库中有两个数字,我想用intval()bcdiv函数减去。我不确定为什么其中一个数字来自string另一个是float

这是两个数字的var_dump

number1: float(0.11037128) 
number2: string(10) "0.19902165"

我正在尝试执行的功能

$result = $number1 - $number2;

// var_dump($result) return float(-0.08865037)
$res->result = bcdiv(intval($number1 - $number2), 100000000, 8 ));

$res->save();

我想要存储此结果的列是DECIMAL(20,8)。

没有错误,没有错误。页面正常重新加载。除此结果外,其他所有内容都保存在数据库中。

我正在使用Laravel框架,这是在我的控制器中。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

bcdiv 的操作数排除" scale"必须是字符串 也许这是一个问题

http://php.net/manual/en/function.bcdiv.php

答案 1 :(得分:1)

如果你正在做

$number1 =  0.11037128;
$number2 =  0.19902165;
$res->result = bcdiv(intval($number1 - $number2), 100000000, 8 ));

肯定你只会获得0.00000000

根据intval()的{​​{3}},它从数字中选择整数值。因此,在intval($number1 - $number2)之后,您将获得0,因此您将0.00000000作为bcdiv()输出。

我用过的用例

$number1 =  10.11037128; // Changed this number
$number2 =  0.19902165;
var_dump(bcdiv(intval($number1 - $number2), 100000000, 8 ));

,输出为

string(10) "0.00000009"

参考documentationbcdiv docs

<强>被修改

如果您遇到数字问题,比如获取字符串类型等,请尝试按如下方式对它们进行类型转换。

$number1 = (float) 10.11037128;
$number2 = (float) 0.19902165;