质量变量小数位 PHP

Mass Variable Decimal Places PHP

我知道您可以使用以下命令让变量转到特定的小数位:

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

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

是否存在此功能,还是我被迫从很长的路段全部输入?如果没有命令,我可以更改 .ini 文件中的一行吗?

提前致谢。


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

(HTML 表单生成的用户输入会产生一个等式)。

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

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

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

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

$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);

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

您可以使用 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);
    }
}