PHP 浮点数添加不正确 - 缺少十进制值

Lee*_*Tee 4 php floating-point number-formatting

我正在尝试获取包含数字的变量的总数,有些可能是小数。我需要这是两位小数,并且正在使用 number_format() 函数。

$total =  $order->order->net+$order->order->deductions+$order->order->vat+$order->order->postage+$order->order->postage_tax; 
            echo number_format((float)$total, 2, '.', '');?>
Run Code Online (Sandbox Code Playgroud)

我注意到以下值加起来不正确,似乎忽略了小数。总数应该是 118.50,但我得到了 118.00。

100+0+17.5+1+0

我对此进行了研究,并找到了以下内容

http://floating-point-gui.de/basic/

我有点困惑。谁能解释一下我需要做什么?

*编辑 下面是 $order 变量的转储,显示了我试图加起来的数字。您可以看到 17.5 是 17.5 而不是 17。是否因为它们被指定为字符串?

object(SimpleXMLElement)#12 (21) { ["id"]=> string(6) "922704" ["shopkeeper_orderno"]=> string(4) "1001" ["customer"]=> string(6) "797893" ["creationdate"]=> string(16) "29-05-2012 11:55" ["net"]=> string(3) "100" ["vat"]=> string(4) "17.5" ["status"]=> string(1) "1" ["isnew"]=> string(1) "0" ["deductions"]=> string(1) "0" ["postage"]=> string(1) "1" ["paymentmethod"]=> string(20) "PayPal " ["instructions"]=> object(SimpleXMLElement)#17 (0) { } [2]=> object(SimpleXMLElement)#22 (1) { ["items"]=> object(SimpleXMLElement)#30 (9) { ["id"]=> string(7) "1384486" ["headerID"]=> string(6) "922704" ["productID"]=> string(7) "4959678" ["description"]=> string(13) "Wedding dress" ["net"]=> string(3) "100" ["vat"]=> string(4) "17.5" ["qty"]=> string(1) "1" ["formID"]=> string(2) "-1" ["options"]=> object(SimpleXMLElement)#31 (1) { ["options"]=> array(2) { [0]=> object(SimpleXMLElement)#32 (6) { ["id"]=> string(6) "519981" ["orderDetailsID"]=> string(7) "1384486" ["optionid"]=> string(6) "646934" ["optionCost"]=> string(1) "0" ["optionVAT"]=> string(1) "0" ["customText"]=> string(9) "size : 12" } [1]=> object(SimpleXMLElement)#33 (6) { ["id"]=> string(6) "519982" ["orderDetailsID"]=> string(7) "1384486" ["optionid"]=> string(6) "647285" ["optionCost"]=> string(1) "0" ["optionVAT"]=> string(1) "0" ["customText"]=> string(14) "Colour : Ivory" } } } } } } ["postage_tax"]=> string(1) "0" ["dispatched"]=> string(1) "0" ["paybyotherid"]=> string(2) "-1" ["wheredidyouhearid"]=> string(2) "-1" }

Mil*_*ike 5

您可以使用舍入然后使用数字格式:

  $total = 100+0+17.5+1+0.2;
//echo number_format((float)$total);  //119
  echo number_format(round((float)$total,2),2);  //118.50
Run Code Online (Sandbox Code Playgroud)


Tuf*_*rım 3

您确定所有这些变量都是intfloat类型吗?检查类型为

var_dump($order->order->net, $order->order->deductions, $order->order->vat,$order->order->postage, $order->order->postage_tax);
Run Code Online (Sandbox Code Playgroud)

如果您使用number_format这些变量,它们可能是字符串,请使用floatval ()。

检查示例,

$a = 100+0+"17,5"+1+0;
    var_dump($a);
Run Code Online (Sandbox Code Playgroud)

结果:int(118)

$b = 100+0+17.5+1+0;
    var_dump($b);
Run Code Online (Sandbox Code Playgroud)

结果:浮动(118.5)