尝试在PHP中格式化科学数字:
sprintf(%'1.2E',$var)
这让我得到5.01E + 1
我正在尝试在+符号后打印2位数
解析器要求数字格式为: 5.01E + 01而不是5.01E + 1
是否可以使用sprintf实现此格式? 有没有其他方法可以达到这个目的?
感谢您寻找
答案 0 :(得分:3)
我找不到单独使用sprintf
的方法,但我相信以下内容会更接近“正确”的方式。以下计算基数为10的对数的指数。
然后,您可以将原始值(除以指数的幂除以10) 和 将指数传递给sprintf
函数作为浮点数分别为整数。您可以强制使用正+
符号,记住它是否符合字符/填充长度。
function scientificNotation($val){
$exp = floor(log($val, 10));
return sprintf('%.2fE%+03d', $val/pow(10,$exp), $exp);
}
scientificNotation(5.1); // 5.10E+00
scientificNotation(50.1); // 5.01E+01
scientificNotation(500.1); // 5.00E+02
scientificNotation(0.0051); // 5.10E-03
答案 1 :(得分:1)
据我所知,没有内置方法。但是有了一点Regex黑魔法,你可以做这样的事情:
preg_replace('/(E[+-])(\d)$/', '${1}0$2', sprintf('%1.2E',$var));
请注意,我刚刚拨打sprintf()
来调用preg_replace()
。如果正则表达式不匹配,它将保留sprintf()
的输出。
答案 2 :(得分:0)
以上答案都很有效。
还发现我可以使用:
$var_formatted = shell_exec("printf '%1.2E' $var");
这可能是最干净的,因为脚本具有执行命令的权限。
E + nn格式是linux shell printf的默认输出格式。
来自shell:
:~$ echo `printf '%1.2E' 500`
5.00E+02
:~$ echo `printf '%1.2E' 5`
5.00E+00
:~$ echo `printf '%1.2E' 0.05`
5.00E-02