我正在尝试从十进制数字中删除尾随零。
例如:如果输入数字是 0.0002340000,我希望输出是 0.000234
我正在使用sprintf("%g",$number),但这在大多数情况下是有效的,除了有时它将数字转换为 E- 的指数值。我怎样才能让它只显示为一个完整的十进制数?
数字没有尾随零。仅当您以十进制形式表示数字(字符串)时,才会出现尾随零。因此,第一步是将数字转换为字符串(如果尚未转换)。
my $s = sprintf("%.10f", $n);
(该解决方案假设适用于 OP 的输入,并且他的输入似乎有 10 个小数位。如果您希望显示更多数字,请使用您想要出现的小数位数而不是 10。我认为这是显而易见的。如果你想像 @asjo 一样荒谬,如果你想确保不丢失任何你尚未丢失的精度,请对双精度数使用 324 位小数。)
然后您可以删除尾随的零。
$s =~ s/0+\z// if $s =~ /\./;
$s =~ s/\.\z//;
或者
$s =~ s/\..*?\K0+\z//;
$s =~ s/\.\z//;
或者
$s =~ s/\.(?:|.*[^0]\K)0*\z//;