Sprintf函数,结合科学记数法和固定的小数PHP

时间:2014-09-16 17:31:31

标签: php

我的数据库表格中包含名为"格式"的列。我将在其中放置指定的Sprintf值。

如果我想要科学价值,那么我只需将'%E'放在列中。但是我可以将这个值与rtrim十进制整数相结合吗?比如,例如我的值是

$number1 = 126;
echo(sprintf('%E', $number1));

我可以使用 rtrim 函数来舍弃E之前的尾随0,而不是获取1.260000E+2,因此我的值变为1.26E+2

如果我的变量是

   $number1 = 12666666;

然后我仍然希望它打印1.266667E+7.你们有一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

使用preg_replace()

echo(sprintf('%E', 126));  // 1.260000E+2
echo(preg_replace('/0+E/', 'E', sprintf('%E', 126))); // 1.26E+2
echo(preg_replace('/0+E/', 'E', sprintf('%E', 12666666))); // 1.266667E+7

答案 1 :(得分:1)

您可以计算精度说明符的用法,如下所示:

$numbers = [
    -126,
    0,
    1,
    12,
    126,
    12600000,
    12666666
];

foreach ($numbers as $number) {
    $precision = min(6, max(0, strlen(trim($number, '-0')) - 1));
    printf("%.{$precision}E\n", $number);
}

输出:

-1.26E+2
0E+0
1E+0
1.2E+1
1.26E+2
1.26E+7
1.266667E+7