从十进制字符串中删除尾随零

时间:2018-04-23 17:43:45

标签: php number-formatting

我有这些数字:

0.00000100
0.00100000
0.01000000
0.00001000

我希望使用以下方法删除十进制中不必要的零:

$decimal_cutter = (float) $decimal_cutter;
echo sprintf('%f', $decimal_cutter) . '<br>';

它适用于某些数字,其他一些产生这个:

1.0E-6
0.001
0.01
1.0E-5

我想使用小数,而不是科学格式。

请注意,我也尝试使用number_format(),但请记住,通过设置小数点数可以减少其余数字。我只想在1之后删除0。

2 个答案:

答案 0 :(得分:1)

如果您只是担心不显示这些字符,为什么不简单地trim

您可以简单地致电rtrim($yourNumber, '0')

例如:

$a = [];

$a[] = "0.00000100";
$a[] = "0.00100000";
$a[] = "0.01000000";
$a[] = "0.00001000";

foreach ($a as $b) {
    echo rtrim($b, '0'), "\n";
}

哪个输出:

0.000001
0.001
0.01
0.00001

从逻辑上讲,此方法要求您的任何十进制数字都与0不同,否则,诸如2.0000之类的数字将显示为2.,这可能不理想。 / p>

您可以使用preg_replace

构建更通用的解决方案
$a = [];

$a[] = "0.00000100";
$a[] = "0.00100000";
$a[] = "0.01000000";
$a[] = "0.00001000";
$a[] = "2.00000000";
$a[] = "2.01011000";
$a[] = "0.00123000";

foreach ($a as $b) {
    echo preg_replace('|(?<!\.)0+$|', '', $b), "\n";
}

这将查找所有不带句点的尾随零,并输出:

0.000001
0.001
0.01
0.00001
2.0
2.01011
0.00123

答案 1 :(得分:-1)

既然你提到你的数据总是“1”,这是一个简单的方法:

$s = '0.00000100';
echo strstr($s, '1', true).'1';

注意:请确保先将数据转换为字符串