我试图从十进制数中删除尾随零.
例如:如果输入的数字是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//;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。