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

Posted

技术标签:

【中文标题】从十进制字符串中删除尾随零【英文标题】:Remove trailing zeros from decimal string 【发布时间】:2018-04-23 17:43:45 【问题描述】:

我有这些号码:

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。

【问题讨论】:

您的数据总是“1”还是有时是另一个数字? 总是'1',兄弟 【参考方案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.,这可能并不理想。

您可以使用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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于从十进制字符串中删除尾随零的主要内容,如果未能解决你的问题,请参考以下文章

从Excel中删除尾随零并将小数点添加到字符串

Swift - 从 Double 中删除尾随零

在python中以十进制数字显示尾随零而不返回字符串

截断尾随零 datagridview 列

如何删除字符串中的前导零和尾随零? Python

将十进制字符串 IP 掩码转换为带有尾随零的无符号整数