表示形式 | rpn入門(中級編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | rpn入門 | rpnの使い方を基本から応用まできちんと学習。

HOME > 講座 > rpn入門 > 中級編 > 表示形式 hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

表示形式

 rpnは結果を数値で返します。その数値は整数や小数を伴った実数、非常に大きな数や小さな数といろいろな種類があります。rpnは数値の違いに合わせて見やすいように自動的に調整しますが、自分で好みの表示形式にすることもできます。

以下はrpnで表示することができる6つの形式です。それぞれ名称と説明を示します。

通常形式
何も指定しない状態の数値表示形式です。混合形式と同じです。
整数形式
小数のない整数のみの表示形式です。
固定長形式
表示桁数を固定にした表示形式です。
指数形式(科学表記)
有効桁数が6~7桁+指数の表示形式です。とても大きな数値や小さな数値を表現するのに適しています。
混合方式
大きな数値や小さな数値では指数形式を使い、それ以外は短く数値表現する形式です。
桁区切方式
3桁区切りでカンマを挿入した形式です。小数点は無視されます。金額表示に適しています。

表示オプションの書き方

 表示形式の変更はオプションで行います。オプションは"-"とアルファベットの記号を繋げたもので、-rや-fdなどがあります。rpnの後に逆ポーランドの式を書くのは今までどおりですが、その後にオプションを加えることで、計算結果の表示形式を変えることができます。

  例
  >rpn 1.1 2.2 + -fd
       ①        ②
  ※1.1と2.2を足した答えを整数形式で表示する。


①の「1.1 2.2 +」がrpn式で、②の-fdが表示形式を変えるオプションです。次に数値の1234.5678をそれぞれの表示形式に変えるオプションを使った場合を示します。

  通常形式
  >rpn 1234.5678
  1234.57

  整数形式
  >rpn 1234.5678 -fd
  1234

  固定形式
  >rpn 1234.5678 -ff
  1234.567800

  指数形式
  >rpn 1234.5678 -fe
  1.234568e+03

  混合形式
  >rpn 1234.5678 -fg
  1234.57

  桁区切形式
  >rpn 1234.5678 -fc
  1,234


表示形式の大体のイメージは掴めたでしょうか。日常使うほとんどの場面では通常形式(混合形式)で問題はないと思いますが、お金の計算は3桁区切りが分かりやすいですし、科学技術計算では指数形式の方が統一されていて分かりやすいこともあります。

リダイレクトで大量データを一気に

 このようにオプションで指定することにより、好みの形式で答えを表示できますが、大量の数値の表示形式を変更したいときにはちょっと面倒です。

具体的に例を示して説明します。以下は玄米100gあたりの成分表です。

  成分          mg       成分          mg      成分          mg
  ============= ======   ============= ======  ============= ======
  たんぱく質    6800     マグネシウム  110     ビタミンB1  0.41
  脂質          2700     リン          290     ビタミンB2  0.04
  炭水化物      73800    鉄            2.1     ナイアシン    6.3
  灰分          1200     亜鉛          1.8     ビタミンB6  0.45
  ナトリウム    1        銅            0.27    葉酸          0.0027
  カリウム      230      マンガン      2.05    パントテン酸  1.36
  カルシウム    9        ビタミンE    1.3     食物繊維      3700

                              出展:文部科学省「日本食品標準成分表」


このうちのmg(ミリグラム)だけを集めたファイルがdata.txtにあるとします。

  6800
  2700
  73800
  1200
  1
  230
  9
  110
  290
  2.1
  1.8
  0.27
  2.05
  1.3
  0.41
  0.04
  6.3
  0.45
  0.0027
  1.36
  3700


以上がその内容なのですが、一つずつrpnでオプション指定しながらの変換は日が暮れてしまいます。このようにファイルにデータが既に格納されている場合はリダイレクトの機能を使うと一発で変換できます。

情報リダイレクトについては、rpn基礎プログラムで計算しようdos入門リダイレクトに詳しい説明があります。

では、上記のデータを整数形式に変換してみましょう。次がそのrpn式です。

  >rpn -fd <data.txt
  6800
  2700
  73800
  1200
  1
  230
  9
  110
  290
  2
  1
  0
  2
  1
  0
  0
  6
  0
  0
  1
  3700


全ての数値が整数でしか表示されていませんね。小数がきれいにカットされています。このようにファイルに数値を格納しておいて、リダイレクトでrpnにデータを渡すことで表示形式を一気に変えることができます。

以下の図で説明すると、まずdata.txtのデータがリダイレクトでrpnに渡されて整数変換されます。変換されたデータはそのまま画面に表示されるという仕組みです。

      +--------+
      |        | (data.txtから取り出して…)
      v        |
  >rpn -fd <data.txt
      |
      +----------------> (画面へ表示)
  (整数に変換して)


同じようにして、表示オプションを使って変換した結果を一覧にして示します。

  なし    -fd     -ff             -fe             -fg     -fc
  6800    6800    6800.000000     6.800000e+03    6800    6,800
  2700    2700    2700.000000     2.700000e+03    2700    2,700
  73800   73800   73800.000000    7.380000e+04    73800   73,800
  1200    1200    1200.000000     1.200000e+03    1200    1,200
  1       1       1.000000        1.000000e+00    1       1
  230     230     230.000000      2.300000e+02    230     230
  9       9       9.000000        9.000000e+00    9       9
  110     110     110.000000      1.100000e+02    110     110
  290     290     290.000000      2.900000e+02    290     290
  2.1     2       2.100000        2.100000e+00    2.1     2
  1.8     1       1.800000        1.800000e+00    1.8     1
  0.27    0       0.270000        2.700000e-01    0.27    0
  2.05    2       2.050000        2.050000e+00    2.05    2
  1.3     1       1.300000        1.300000e+00    1.3     1
  0.41    0       0.410000        4.100000e-01    0.41    0
  0.04    0       0.040000        4.000000e-02    0.04    0
  6.3     6       6.300000        6.300000e+00    6.3     6
  0.45    0       0.450000        4.500000e-01    0.45    0
  0.0027  0       0.002700        2.700000e-03    0.0027  0
  1.36    1       1.360000        1.360000e+00    1.36    1
  3700    3700    3700.000000     3.700000e+03    3700    3,700


ちなみに宇宙が誕生してからの年数、一年のうちで交通事故で死ぬ確率、宝くじで1等が当たる確率は以下になります。

  >rpn 13700000000
  1.37e+10
  >rpn 160000 n
  6.25e-06
  >rpn 10000000 n
  1e-07


全て指数形式になっていますね。それくらいにとても大きい数値かとても小さい数値ということですね。

8桁日付の扱い

 最後に応用として、8桁の日付の扱いについて説明します。カレンダー・システムパッケージのrpnプログラムなどが8桁の日付を処理しますが、8桁の日付をそのままrpnで出力させると日の情報が失われてしまいます。

2009年12月31日を数値の20091231として表現しているとしましょう。この数値をrpnで扱うと以下のように情報が欠損します。

  >rpn 20091231
  2.00912e+07


2.00912e+07は2.00912×10の7乗という指数形式(科学表記)になっていますので、有効な桁は2.00912です。なんと日の情報が欠けてしまいます。そこで、日付を扱うときは-fdオプションをつけることになります。

  >rpn 20091231 -fd
  20091231


年月日が情報欠損なく表示されていますね。

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。