质量变量小数位PHP

时间:2016-04-04 14:11:01

标签: php numbers decimal

我知道您可以使用以下命令告诉变量到一定数量的小数位:

string number_format ( float $number [, int $decimals = 3 ] )

然而,我无法找到一种方法来为所有数字做这个集体。由于我有数百个变量,所有变量都需要具有相同的小数位数(无论是舍入还是扩展零),我希望能够告诉它自动执行此命令而不是键入在上面的所有变量命令中。

这个功能是否存在,还是我被迫长期输入?如果没有命令,我可以更改.ini文件中的一行吗?

提前致谢。

我不会将这些数字存储在数据库中 - 我在屏幕上回显它们并发送电子邮件。

(从HTML表单生成的用户输入中有一个等式)。

接收电子邮件的人要求将所有数字四舍五入到第三个小数,这是否意味着在千分之一舍入或者如果只需要整数,十分之一或百分之一则将零延伸到千分之一。实际上有数百个单独的变量,即$ number1,$ number2等。

2 个答案:

答案 0 :(得分:0)

如果您正在讨论脚本中应用于字符串变量的所有数字,您可以运行以下行:

if(is_int($value) || is_float($value)){
    $value = number_format ( float $number ,3 );
}

显然,当您引用字符串时,您还可以运行类似的查询来检查您的字符串是否为浮动数字:

$values = get_defined_vars();
foreach ($values as $key=>$value){
     if(is_string($value) && (float)$value == (string)$value){
        $value = number_format ((float)$value , 3 );
    }
   /***
    Save over the original script variables with the edited ones.
    Note double dollar
    ***/
   $$key = $value;
}
unset($values,$value,$key);

你可以阅读在base-2(计算机存储)中,浮点数固有地存储不准确,请阅读http://floating-point-gui.de/

另外,真的,为什么你需要这种看似不必要的精度?

但是当你在什么阶段运行这个命令时,在脚本开始时值大多是空的?或者在最终使用这些值并且不再有效时?

我认为我的回答可以回答您的问题,但我认为您的问题实际上并未明确表达您的问题。

回应评论/编辑的问题:

简单而不是使用$values = get_defined_vars();使用值将输入保存到数组中并通过数组执行上面的foreach

$values = array(array of numbers);
foreach ($values as &$value){
     if(is_string($value) && (float)$value == (string)$value){
        $value = number_format ((float)$value , 3 );
    }
}
unset($value,$key);

这会将数组中的所有值更新为spcified数字位置。

答案 1 :(得分:0)

您可以使用decimal扩展名来实现此目的,并以一个中心位置进行创建和格式化。像这样:

class Number 
{
    public static function create($value, $precision = Decimal::DEFAULT_PRECISION): Decimal
    {
        return new Decimal($value, $precision);
    } 

    public static function format(Decimal $decimal, int $places = 3): string
    {
        return $decimal->toFixed(3);
    }
}