正在查找PHP智能格式编号

正在查找PHP智能格式编号,php,formatting,numbers,Php,Formatting,Numbers,我正在寻找一个解决方案的智能数字格式在PHP 例如,下面有2个数字,小数点后需要4位数字: 1.12345678 0.00002345678 使用普通数字格式,结果如下: 1.1234 // Looking good 0.0000 // No good 我们能让它一直运行直到有4个非零数字吗?如果它能返回0.00002345,完美 非常感谢 这是我用来解决这个问题的代码: $num=0.00002345678; $num_as_string=number_格式($num,PHP_FLOAT_

我正在寻找一个解决方案的智能数字格式在PHP

例如,下面有2个数字,小数点后需要4位数字:

1.12345678
0.00002345678
使用普通数字格式,结果如下:

1.1234 // Looking good
0.0000 // No good
我们能让它一直运行直到有4个非零数字吗?如果它能返回0.00002345,完美


非常感谢

这是我用来解决这个问题的代码:

$num=0.00002345678;
$num_as_string=number_格式($num,PHP_FLOAT_DIG,'.'','');
$zeros=strspn($num作为字符串,“0”,strpos($num作为字符串,”)+1);
回音编号格式($num,(4+0),“,”);
它将浮点数转换为字符串,检查小数点后有多少个零,然后对额外的零进行数字格式化


请注意,如果您的浮点值太大,它可能会损坏,您可以将
PHP\u float\u DIG
更改为更大的数字,以解决此问题。

可能有些过分,模式可以优化,但只是为了好玩;在
之后获取可选的0和4,而不是0:

preg_match('/\d+\.([0]+)?[^0]{4}/', $num, $match);
echo $match[0];
要对其进行四舍五入,我们可以在0后获得5位数字,然后将其格式化为-1的长度(将进行四舍五入):

对于
$num='1234.000023456777'
结果将是
1234.00002346
,并且
$matches
将包含:

Array
(
    [0] => 1234.000023456
    [1] => 000023456
)

欢迎来到堆栈溢出。虽然我们很乐意在您陷入困境时提供帮助,但我们仍然希望您自己努力找到解决方案。如果你尝试过某件事,请用你的问题来展示你的尝试,并解释它在哪里以及如何失败。既然你是新来的,我建议你阅读一些关于写一个好问题的建议。它会返回
0.00002345
还是
0.00002346
?似乎是后者,因为下一个数字是
6
,如果您执行舍入,您将丢失更少的信息。@ChrisHaas:关于舍入,您完全正确!谢谢@埃尔乌·瓦尼亚:谢谢你的评论。事实上,我已经到处找了,但找不到我需要的确切答案。我想没有多少人愿意这样做,因为我真的找不到类似的东西。谢谢你的时间!我尝试了你的代码,但它显示0.0000:(这很有趣。当我测试它时,它对我有效。可能是因为不同的php服务器设置,我猜谢谢你的帮助!你的代码工作得很好!!!正如上面提到的@ChrisHaas,我们应该对数字进行四舍五入,例如:0.00002345678应该是0.00002346,我们可以这样做吗?你们使用的是什么版本的php?当我运行此代码时,我可以t
2.3456
作为输出。我使用的是7.2 FYIII,如果您的代码为$n=0.000023455678,您将得到2.3456作为结果。我必须代码为$n=“0.000023455678”,我猜它是一个字符串,而不是整数。啊,是的,regX毕竟是字符串。我想知道我们是否可以将reg表达式与格式编号结合起来,以便输出:1234.00002346?
Array
(
    [0] => 1234.000023456
    [1] => 000023456
)