perl

时间:2015-12-14 12:19:22

标签: perl format

我有一个介于0.001和1000之间的随机数,我需要perl以5个字符的固定列宽打印它。也就是说,如果它太长,它应该是圆形的,如果它太短,它应该用空格填充。

我在网上找到的所有内容都建议使用sprintf,但如果数字太长,sprintf会忽略字段宽度。

有没有办法让perl这样做?

什么不起作用:

my $number = 0.001 + rand(1000);
my $formattednumber = sprintf("%5f", $number); 
print <<EOF;
   $formattednumber

EOF

3 个答案:

答案 0 :(得分:4)

您需要动态定义Name: ConfigurationOfSoup-StephanEggermont.75 Author: StephanEggermont Time: 14 December 2015, 1:39:52.307715 pm UUID: 6c11fb83-5299-4852-9563-73ecc34992a0 Ancestors: ConfigurationOfSoup-FrancoisStephany.74 Adopted bug fix to stable 1.7.1 , added Pharo 5 versions 模式。小数位数取决于小数点左侧的位数。

此功能将为您完成。

package com.dannywind.delphi;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;

public class BootReceiver extends BroadcastReceiver
{

        @Override
        public void onReceive(Context context, Intent intent) 
        {
           Intent launchintent = new Intent();
           launchintent.setClassName(context, "com.embarcadero.services.MyLocationService");           
           context.startService(launchintent);  
        }

} 

输出可能是:

sprintf

答案 1 :(得分:1)

您可以在pack之后使用sprintf。它可能不是一种计算效率高的方法,但实现和维护起来相对简单:

my $formattednumber = pack ('A5', sprintf("%5f", $number));

答案 2 :(得分:0)

simbabque发布的答案并未涵盖所有案例,所以这是我的改进版本,以防任何人也需要这样的事情:

sub round_to_col {
  my ( $number, $width ) = @_;

  my $width_int = length int $number;
  my $sprintf; 
  print "round_to_col error: number longer than width" if $width_int > $width;
  $sprintf = "%d" if $width_int == $width;
  $sprintf = "% d" if $width_int == $width - 1;
  $sprintf = sprintf( '%%%d.%df', $width_int, $width - 1 - $width_int )
    if $width_int < $width -1;
  return sprintf( $sprintf , $number );
}