perlで計算させた値を上3ケタだけ抽出するには?

[上に] [前に] [次に]
討入り万歳 1999/11/28(日) 11:55:18
アクセス数を取っているのですが、
これに
一時間あたりのカウント/一日分の総カウント数*100
と、いう計算をさせたいと思っています。

計算自体はちゃんとできているのですが、
その値が例えば、98.563・・・・と不要としか思えないくらい、長く続いてしまいます。
これを値の上3桁(上の例だと98.5ですね)だけ抽出したいのですが、
どのようにしたらよいでしょうか?

andi 1999/11/28(日) 13:05:19
/(\d+\.\d)/$1/
で出来ますか。

J.Naka 1999/11/28(日) 13:12:26
ソース値を0.1で割り、その商に0.1を掛ける。

或いは文字列として98.5を取るのなら、ソース値を10倍し1で割る。
それを10進数文字列化後に、文字列右端から1文字目と二文字目に小数点を挿入する。

#言語が解からないから、具体的ソースが書けませんので、いわゆるアルゴリズムというやつを書いてみました。。
#アルゴリズムという表現であってんのかな?(笑)

B-Cus 1999/11/28(日) 14:05:09
printf("%3.1f",$num) とか。

J.Naka 1999/11/28(日) 14:11:17
>#言語が解からないから、具体的ソースが書けませんので、
あっ、タイトルに Perl と書いてあったです。(^^;
おまけに、既に正解がでてました。
andiさんの回答をもっと丁寧に書くと、
  $src =~ /(\d+\.\d)/;print "$1\n";
  で少数第一位から上が表示。と云うことすね。

文字列操作ではなく、数値計算としてなら↓も出来ます。
  $A = int($src*10)/10;print "$A\n";

上記の処理内容ならば、文字列操作よりも数値操作のほうが処理は軽いと思います。 

それと、これは上位3桁の取り出しではなく、少数第一位から上位桁すべての取り出しが正確な表現ですね。

討入り万歳 1999/11/28(日) 14:28:14
andiさん、B-Cusさん、J.Nakaさん、ご教授有り難うございました。
私のも少し説明が違ってました、
「上3桁の値を得る」のではなくて、
「小数点第1位から上の値を得るには」、でした。(^^;)

試してみたところ、上手く表示出来ました。
本当に有り難うございました。

討入り万歳 1999/11/28(日) 14:29:00
[[解決]]
解決チェック入れ忘れ(^^;)

[上に] [前に] [次に]