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
关键修改说明
- 单独提取角度值
$angle = 10**-$i,便于单独格式化 - 用
sprintf("%.7f", $angle)强制将角度转为7位小数的固定格式,确保小数值不会触发科学计数法 - 通过正则表达式
s/\.?0+$//清理掉末尾多余的零(比如1.0000000会变成1,0.0000100会变成0.00001) - 最后用原有的
printf格式输出处理后的角度值
内容的提问来源于stack exchange,提问作者Dan Jacobson
相关产品推荐
相关产品推荐

