数字丢失其格式

时间:2014-07-30 16:42:31

标签: php

每当我将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 ) 

2 个答案:

答案 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()。