2

这要死我了!我从来没有遇到过这么多麻烦,我无法弄清楚我在这里做错了什么。

如果我有一个数字,比如 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

如何在不改变数学的情况下准确地使用十进制数?

非常感谢!

4

4 回答 4

5

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

$income = (float) $commission;

当你不这样做时会发生什么的例子

$x = simplexml_load_string("<a>2.4</a>");
echo $x * 100; // output:  200
于 2012-10-29T20:05:35.943 回答
2

除了像 Tim 所说的那样使用浮点数之外,在对浮点数执行算术运算时,还要确保使用BC Math函数。特别是 bcmul()

$income100 = bcmul($income, 100);

于 2012-10-29T20:05:21.220 回答
0

浮点数的问题在于你不能用它们来表示十进制数(除非它可以写成a/b整数aand b,即使这样也只有abs(a) < pow(2,52)andb是 2 的幂)。

您最好使用字符串函数来获取整数值:

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

这会将整数部分与小数部分分开,确保小数部分为两位长,并将其推到整数部分的末尾,从而有效地将原始数字乘以 100。

于 2012-10-29T20:07:38.237 回答
0

我认为最简单的解决方案是使用floatval()将其转换为浮点数

$income = floatval($comission)

将其余代码保持原样,它应该按预期工作。

于 2012-10-29T20:09:40.900 回答