perl - 我可以在 Perl 中使用 sprintf 为数字指定最大精度宽度吗?

标签 perl

是否可以使用 Perl 的 sprintf 函数来指定 float 的最大精度宽度?阅读文档后,我认为不是,但可能是我忽略了一些东西。

因此,如果我有 4.12,我希望将数字格式设置为 4.12

my $abc = 4.12;
my $out = sprintf("%?...", $abc); # $out eq '4.12';

但是,如果数字的精度超过 6 位,我只需要 6 位:

my $def = 1.23456789;
my $out = sprintf("%?...", $def); # $out eq '1.234568';

这可以用 sprintf 实现吗?

编辑

Currentyl,我正在使用

sub output_number {
  my $number = shift;

  my $ret = sprintf("%.6f", $number);

  $ret =~ s/0*$//g;
  $ret =~ s/\.$//g;

  return $ret;
}

为了我的目的,它满足了我的需要。但我希望有一种更优雅的方式。最好是单行,不一定限于使用 sprintf

另请注意,建议的 printf ("%.7g", $number) 不符合我的要求(例如 $n = 0.00000000001;.

最佳答案

我相信你可以使用 %.<n>g :

perl -e 'printf "%.7g", 4.12'          =>   4.12
perl -e 'printf "%.7g", 4.12345678'    =>   4.123457

但是如果指数符号真的毁了你的一天,而且你安装的 perl 足够现代,那么总是有

sprintf("%.6f",$number) =~ s/\.?0+$//r

关于perl - 我可以在 Perl 中使用 sprintf 为数字指定最大精度宽度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420251/

相关文章:

perl - Mojolicious session 过期与 default_expiration

python - 用于监视服务器运行状况的脚本库?

Perl:无条件的文件测试运算符

mysql - 如何匹配两个数据库表中的相关值?

linux - 将小时字段增加 5(UTC 到 EST 格式)

perl - 在程序中使用 __DATA__

perl - 是否可以根据数组的大小动态扩展标量分配?

arrays - 如何从文件中获取每一行的数据?

perl - 如何在Perl中获取外部命令的输出?

perl在两个关键字之间抓取文本