我试图得到包含数字的变量总数,有些可能是小数。我需要这是两位小数,并使用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, '.', '');?>
我注意到以下值没有正确加起来,似乎忽略了小数。总数应该是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"
}
答案 0 :(得分:3)
你可以使用圆形和数字格式:
$total = 100+0+17.5+1+0.2;
//echo number_format((float)$total); //119
echo number_format(round((float)$total,2),2); //118.50
答案 1 :(得分:2)
请检查变量$order->order->vat
的值。我认为这不会是17.5,因为如果我们分配你赋予varriable的值并添加它们,它会显示正确的答案。
$a = 100;
$b = 0;
$c = 17.5;
$d = 1;
$e = 0;
$ total = $ a + $ b + $ c + $ d + $ e; echo number_format((float)$ total,2,'。',''); //118.50(答案)
或使用floatval($var)
获取变量的浮点值。
$total = $order->order->net+$order->order->deductions+floatval($order->order->vat)+$order->order->postage+$order->order->postage_tax;
echo number_format((float)$total, 2, '.', '');?>
我希望它会起作用。
感谢
答案 2 :(得分:2)
您确定所有的thears vars都是 int 或 float 类型? 检查类型为
var_dump($order->order->net, $order->order->deductions, $order->order->vat,$order->order->postage, $order->order->postage_tax);
如果您对这些变量使用number_format
它们可能是字符串,请使用floatval()。
查看示例,
$a = 100+0+"17,5"+1+0;
var_dump($a);
结果:int(118)
$b = 100+0+17.5+1+0;
var_dump($b);
结果:float(118.5)
答案 3 :(得分:1)
如果您正在寻找没有任何修正或舍入的确切值,您应该使用{{3}}跟随函数来获得实际的两位小数
$total = $order->order->net+$order->order->deductions+$order->order->vat+$order->order->postage+$order->order->postage_tax;
$total=bcadd(0,$total,2);
echo $total;
答案 4 :(得分:0)
通常,要舍入到2dp的函数是“round”而不是“number_format”。
可见,在你的回声中,他们都会做同样的事情。如果您希望将来使用它,Round将永久调整该数字。
话虽如此,我看不到代码中的任何错误,或者为什么应删除0.5的任何原因。我建议您检查$ order-> order-> vat实际上是17.5而不是17.如果它是17,那么向后追逐它以找到你所交换的位置(例如在数据库或输入验证函数中) ,例如)