Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php科学符号格式_Php_Printf - Fatal编程技术网

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)); 请注意,我刚刚

尝试用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()
的调用包装为对
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
是一个经过消毒的数字类型:)