php科学记谱法格式

时间:2014-01-28 20:36:19

标签: php printf

尝试在PHP中格式化科学数字:

sprintf(%'1.2E',$var)

这让我得到5.01E + 1

我正在尝试在+符号后打印2位数

解析器要求数字格式为: 5.01E + 01而不是5.01E + 1

是否可以使用sprintf实现此格式? 有没有其他方法可以达到这个目的?

感谢您寻找

3 个答案:

答案 0 :(得分:3)

我找不到单独使用sprintf的方法,但我相信以下内容会更接近“正确”的方式。以下计算基数为10的对数的指数。

然后,您可以将原始值(除以指数的幂除以10) 将指数传递给sprintf函数作为浮点数分别为整数。您可以强制使用正+符号,记住它是否符合字符/填充长度。

function scientificNotation($val){
    $exp = floor(log($val, 10));
    return sprintf('%.2fE%+03d', $val/pow(10,$exp), $exp);
}

demo / test cases :

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