You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl编程:如何避免打印小数值时使用科学计数法?

如何让Perl printf输出小数值时不使用科学计数法?

你的原始Perl代码:

my $d = 40000 * 100 / 360;
print "At the equator\n";
printf "%9s° = %10.3f meters\n", 10**-$_, 10**-$_ * $d for 0 .. 7;

运行后输出里的小角度值(如1e-05°)采用了科学计数法,要改为固定小数格式,关键是避免让Perl自动将小数值转为科学计数法的字符串,可以通过手动格式化角度值并清理多余的零来实现:

修改后的代码

my $d = 40000 * 100 / 360;
print "At the equator\n";

for my $i (0 .. 7) {
    my $angle = 10**-$i;
    # 先将角度格式化为足够精度的小数
    my $formatted_angle = sprintf("%.7f", $angle);
    # 去掉末尾多余的零,以及可能残留的小数点
    $formatted_angle =~ s/\.?0+$//;
    # 按原格式输出
    printf "%9s° = %10.3f meters\n", $formatted_angle, $angle * $d;
}

修改后输出

At the equator
       1° =  11111.111 meters
     0.1° =   1111.111 meters
    0.01° =    111.111 meters
   0.001° =     11.111 meters
  0.0001° =      1.111 meters
 0.00001° =      0.111 meters
0.000001° =      0.011 meters
0.0000001° =      0.001 meters

关键修改说明

  1. 单独提取角度值$angle = 10**-$i,便于单独格式化
  2. 用sprintf("%.7f", $angle)强制将角度转为7位小数的固定格式,确保小数值不会触发科学计数法
  3. 通过正则表达式s/\.?0+$//清理掉末尾多余的零(比如1.0000000会变成1,0.0000100会变成0.00001)
  4. 最后用原有的printf格式输出处理后的角度值

内容的提问来源于stack exchange,提问作者Dan Jacobson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:42:42