每当我将number_format分配给一个数字时,只要我添加或减去任何其他数字,它就会丢失其格式。
如何设置一个数字变量只能确保它始终保持十进制状态?
每次我添加或减去任何其他数字时,我都不想使用number_format。我想设置一次。
$array = array(
'a'=>0,
'b'=>number_format(0,2)
);
$array['b'] += 5.00;
print_r($array);
//Output: Array ( [a] => 0 [b] => 5 )
答案 0 :(得分:2)
这就是number_format
的工作方式。它没有"存储"新格式,而只是返回一个格式化的字符串。此字符串主要用于打印目的。
所以当你这样做时
$x = number_format(0,2);
echo $x;
打印0.00
。
现在,如果你这样做:
$x = $x+ 5.00;
echo $x;
它将打印5
,因为 5.00 已添加到字符串0.00 ,结果只有5,因为默认情况下这些变量是数字。在打印之前,您需要再次执行number_format:
echo number_format($x,2);
您可以使用以下代码轻松测试:
$x = 3.00;
echo $x; //will print 3
echo number_format($x,2); //will print 3.00
请注意,这种行为是因为小数点是零,如果它们是非零值,它们将被正确显示。
答案 1 :(得分:0)
number_format()返回一个字符串。您将$ array ['b']设置为“0.00”。
当您尝试添加5时,PHP现在将字符串“0.00”转换为数字0,然后再添加5,变为5。
如果要将其设置为字符串“5.00”,则每次都必须使用number_format()。但是,您可以使用以下代码强制它自动运行number_format():
<?php
class saveNumberFormat
{
public $val=0;
public $format=0;
public function __construct($val,$format)
{
$this->val=$val;
$this->format=$format;
}
public function __toString()
{
return number_format($this->val,$this->format);
}
public function increment($byHowMuch)
{
$this->val+=$byHowMuch;
}
}
示例:
$foo=new saveNumberFormat(5,2);
$foo->val++;
echo $foo; // Returns 6.00
请注意,你不能将var_dump()作为对象,因为它不会调用__toString()。