7


1

1.23Mのように、数字(1234567.89など)を読みやすい形式に変換できるようにする、簡単で直接的な方法/サブ/モジュールをご存知ですか?

今、私はいくつかの比較をすることによってこれをすることができます、しかし私は私の方法に満足していません:

if($ bytes> 1000000000){$ bytes =(sprintf( "%0.2f"、$ bytes / 1000000000))) "Gb / s"; } elsif($ bytes> 1000000){$ bytes =(sprintf( "%0.2f"、$ bytes / 1000000))。 "Mb /秒"; } elsif($ bytes> 1000){$ bytes =(sprintf( "%0.2f"、$ bytes / 1000))。 "Kb /秒"; } else {$ bytes = sprintf( "%0.2f"、$ bytes)。 "b / s"; }

ご協力ありがとうございました!

5 Answer


20


http://search.cpan.org/dist/Number-Bytes-Human[Number::Bytes::Human]モジュールが役に立ちます。

使い方の例は、その概要にあります。

Number :: Bytes :: Human qw(format_bytes)を使用してください。

$ size = format_bytes(0); # '0' $ size = format_bytes(2 * 1024); # '2.0K'

$ size = format_bytes(1_234_890、bs => 1000); # '1.3M' $ size = format_bytes(1E9、bs => 1000); # '1.0G'

#OOの方法$ human = Number :: Bytes :: Human-> new(bs => 1000、si => 1); $ size = $ human-> format(1E7); # '10MB' $ human-> set_options(zero => ' - '); $ size = $ human-> format(0); # ' - '


3


http://search.cpan.org/perldoc?Number::Bytes::Human[Number::Bytes::Human]は、あなたが望むことを正確に実行するようです。


2


純粋なPerl形式では、冗長性を減らすためにネストした3項演算子を使用してこれを行いました。

sub BytesToReadableString($){my $ c = shift; $ c> = 1073741824? sprintf( "%0.2fGB"、$ c / 1073741824):$ c> = 1048576? sprintf( "%0.2fMB"、$ c / 1048576):$ c> = 1024? sprintf( "%0.2fKB"、$ c / 1024):$ c。 "バイト"; }

BytesToReadableString(225939)を印刷します。 "/ s \ n";

出力:

220.64KB /秒


2


sub magnitudeformat {my $ val = shift;私の$ expstr;

my $ exp = log($ val)/ log(10); if($ exp <3){return $ val; } elsif($ exp <6){$ exp = 3;} $ expstr = "K"; } elsif($ exp <9){$ exp = 6; $ expstr = "M"; } elsif($ exp <12){$ exp = 9;} $ expstr = "G"; #または "B"。 else {$ exp = 12; $ expstr = "T"; }

sprintf( "%0.1f%s"、$ val /(10 ** $ exp)、$ expstr)を返します。 }


0


このスニペットはPHPで書かれています、そしてそれは大まかに他の誰かが彼らのウェブサイトのどこかに持っていたある例に基づいています(ごめんなさい、私は覚えていません)。

基本的な概念は、ifを使う代わりに、ループを使うことです。

function formatNumberThousands($ a、$ dig){$ unim = array( ""、 "k"、 "m"、 "g"); $ c = 0。 while($ a> = 1000 $ d:0))。 "" $ unim [$ c]; }

number_format()呼び出しは、数千のグループ間のコンマを含む文字列を返すPHPライブラリ関数です。 そのようなものがperlに存在しているかどうかはわかりません。

$ digパラメータは表示する桁数の制限を設定します。 $ digが2の場合、1237から1.2kが得られます。

バイトをフォーマットするには、代わりに1024で割ります。

この関数は今日までのいくつかのプロダクションコードで使われています。