php科学符号格式
尝试用PHP格式化科学数字:php科学符号格式,php,printf,Php,Printf,尝试用PHP格式化科学数字: sprintf(%'1.2E',$var) 这使我达到5.01E+1 我正在尝试在+号后打印两位数字 解析器要求数字格式为: 5.01E+01而不是5.01E+1 有可能用sprintf实现这种格式吗? 有没有其他方法可以做到这一点 感谢您查看据我所知,没有内置方法。但是,通过一点Regex黑魔法,你可以做如下事情: preg_replace('/(E[+-])(\d)$/', '${1}0$2', sprintf('%1.2E',$var)); 请注意,我刚刚
sprintf(%'1.2E',$var)
这使我达到5.01E+1
我正在尝试在+号后打印两位数字
解析器要求数字格式为:
5.01E+01而不是5.01E+1
有可能用sprintf实现这种格式吗?
有没有其他方法可以做到这一点
感谢您查看据我所知,没有内置方法。但是,通过一点Regex黑魔法,你可以做如下事情:
preg_replace('/(E[+-])(\d)$/', '${1}0$2', sprintf('%1.2E',$var));
请注意,我刚刚将对
sprintf()
的调用包装为对preg\u replace()
的适当调用。如果正则表达式不匹配,它将保持sprintf()
的输出不变。我无法找到单独使用sprintf
的方法,但我相信下面的方法更接近“正确”的方法。下面根据以10为底的对数计算指数
然后,您可以将原始值(除以10的指数幂)和指数分别作为浮点和整数传递给sprintf
函数。您可以强制使用正的+
符号,记住它会计入字符/填充长度
函数科学表示法($val){
$exp=地板(对数($val,10));
返回sprintf('.2fE%+03d',$val/pow(10,$exp),$exp);
}
科学符号(5.1);//5.10E+00
科学符号(50.1);//5.01E+01
科学符号(500.1);//5.00E+02
科学符号(0.0051);//5.10E-03
以上两个答案都很有效
还发现我可以使用:
$var_formatted = shell_exec("printf '%1.2E' $var");
如果脚本有执行命令的权限,那么哪一个可能是最干净的
E+nn格式是linux shell printf的默认输出格式
从外壳:
:~$ 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
只要您可以信任
$var
是一个经过消毒的数字类型:)