简单的数学与PHP小数(Simple math with decimals in PHP)

2019-08-02 02:38发布

这是我的命! 我从来没有过这么大的麻烦,我想不出我在做什么错在这里。

如果我有一个数字,说2.32,我想用它做数学它不会工作了。 很简单的例子:

$income = $commission; //Commission is 2.32, retrieved from XML
echo "income: $income<br>";
$income100 = $income*100;
echo "income100: $income100<br>";

结果我得到的是:

income: 2.32
income100: 200

我怎样才能正确使用十进制数有没有它改变它的数学?

非常感谢!

Answer 1:

您需要分配$income按以下方式摆脱底层的SimpleXMLElement

$income = (float) $commission;

当你不知道会发生什么例子 :

$x = simplexml_load_string("<a>2.4</a>");
echo $x * 100; // output:  200


Answer 2:

除了使用花车为蒂姆说,还要确保使用BC数学上浮点数进行算术运算时的功能。 具体地说bcmul() :

$income100 = bcmul($income, 100);



Answer 3:

与浮点数的问题是,不能代表十进制数与它们(除非它可写为a/b为整数ab ,即使如此,仅当abs(a) < pow(2,52)b是2的幂)。

您可以使用字符串函数来得到一个整数值会更好:

$tmp = explode(".",$commission);
$tmp = intval($tmp[0].str_pad(substr($tmp[1],0,2),2,"0"));

这将从小数部分分裂的整数部分,确保Decima的部分是两个数字长,并推它上的整数部分的端部,从而有效地通过100的原始数乘以。



Answer 4:

我认为,最简单的解决办法是将它转换为一个浮动floatval()

$income = floatval($comission)

离开代码的其余部分是和预期它应该工作。



文章来源: Simple math with decimals in PHP