这是我的命! 我从来没有过这么大的麻烦,我想不出我在做什么错在这里。
如果我有一个数字,说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
我怎样才能正确使用十进制数有没有它改变它的数学?
非常感谢!
您需要分配$income
按以下方式摆脱底层的SimpleXMLElement
:
$income = (float) $commission;
当你不知道会发生什么例子 :
$x = simplexml_load_string("<a>2.4</a>");
echo $x * 100; // output: 200
除了使用花车为蒂姆说,还要确保使用BC数学上浮点数进行算术运算时的功能。 具体地说bcmul() :
$income100 = bcmul($income, 100);
与浮点数的问题是,不能代表十进制数与它们(除非它可写为a/b
为整数a
和b
,即使如此,仅当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的原始数乘以。
我认为,最简单的解决办法是将它转换为一个浮动floatval()
$income = floatval($comission)
离开代码的其余部分是和预期它应该工作。