Php 无舍入的数字格式
PHP中是否有一种Php 无舍入的数字格式,php,Php,PHP中是否有一种number\u格式替代方法,允许我选择千和小数分隔符,同时保留小数的数量?例如,类似这样的事情: number_format_alternative( '1234.617', ',', '.' ); >1 234,617 但是 我意识到,我可以实现几乎相同的目标,通过使用高得离谱的小数,并从右边修剪所有零,尽管第二个示例看起来像: number_format_alternative( 120.0, ',', '.' ); >120 编辑:这就是我最后要做的
number\u格式
替代方法,允许我选择千和小数分隔符,同时保留小数的数量?例如,类似这样的事情:
number_format_alternative( '1234.617', ',', '.' );
>1 234,617
但是
我意识到,我可以实现几乎相同的目标,通过使用高得离谱的小数,并从右边修剪所有零,尽管第二个示例看起来像:
number_format_alternative( 120.0, ',', '.' );
>120
编辑:这就是我最后要做的:
function numberOfDecimals( $number ) {
return strlen(strstr(rtrim(sprintf('%.10F', $number), '0'), '.'))-1;
}
由于您将数字作为字符串输入到函数中,因此可以使用正则表达式查看小数点后有多少位,在这种情况下用“.”表示,然后执行
number\u format
,并将$decimals
参数设置为刚计算的数字
一个有效的正则表达式是
\.\d+
,然后从长度中减去1以查找小数,您可以查看我认为性能会更差的情况。可能需要一些测试,我相信还有其他正则表达式可以工作。我不知道,您必须实现自己的版本。之所以有$decimals
参数,是因为浮点数不精确。(顺便说一下:您的字符串首先以数字形式转换为浮点,这就是为什么任何关于尾随零的信息都会丢失的原因)在这种方法中,我甚至不需要regexp,我可以使用strlen(strstr($val,')-1
@leo使用strlen(strstr($val,'))-1
设置$decimals
参数的工作方式相同,可能比正则表达式函数运行得稍快,尽管我从未在PHP中测试过strstr
的速度。
function numberOfDecimals( $number ) {
return strlen(strstr(rtrim(sprintf('%.10F', $number), '0'), '.'))-1;
}