8.33. format 書式付き出力

  • 書式1: format(num,書式)

mcalでは数値を内部的には浮動小数点として管理している。 それをC言語のprintf関数で利用できる出力書式を指定する事で,数値の出力形式を変更する事ができる。 利用できる書式は以下の3つである。 egin{itemize} item %f: 小数形式表記 item %e,%E: 指数形式表記(大文字%Eで指数記号を大文字表記) item %g,%G: f,eの自動判断(大文字%Gで指数記号を大文字表記) end{itemize} 例えば、小数形式表記の 0.00726 は、指数形式表記では 7.260000e-03 となり、 1265 は、 1.265000e+03 となる。 さらに、 % の直後に数字もしくはプラス記号を指定することで、表示桁数と符号表記を制御できる。 数字は「 全体の幅.小数点の幅 」によって指定する。 例えば、 123.456789 は、 %5.2f の書式によって 123.46 に、 %8.3f の書式によって 123.457 となる。 プラス符号を常に表記したければ数字の前にプラス記号を付加すればよい。 例えば、 123.456789 は、 %+5.2f の書式によって +123.46 となる。 書式の中には上記で説明した記号以外にも、任意の文字列を含めることが可能である。 例えば、 250 は、書式 "合計%g円" によって、 "合計250円" となる。 %という文字を表示したければ"%%"と記すれば良い。 15 は、書式 "%g%%" によって、 15% となる。

利用例

importと入力データ(CSV)の準備

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''id,val
 61,0.00726
 72,123.456789
 83,
 94,-0.335
10''')
11
12with open('dat2.csv','w') as f:
13  f.write(
14'''id,amount
151,1000
162,250
173,
184,960
19''')

基本例

val を実数として小数点以下2桁に変換する。

1nm.mcal(c='format(${val},"%8.3f")', a='rsl', i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# id,val,rsl
4# 1,0.00726,   0.007
5# 2,123.456789, 123.457
6# 3,,
7# 4,-0.335,  -0.335

指数表現

val を指数表現で出力。

1nm.mcal(c='format(${val},"%e")', a='rsl', i="dat1.csv", o="rsl2.csv").run()
2### rsl2.csv の内容
3# id,val,rsl
4# 1,0.00726,7.260000e-03
5# 2,123.456789,1.234568e+02
6# 3,,
7# 4,-0.335,-3.350000e-01

文字列との組み合せ

1nm.mcal(c='format(${amount},"total amount is %g yen.")', a='rsl', i="dat2.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# id,amount,rsl
4# 1,1000,total amount is 1000 yen.
5# 2,250,total amount is 250 yen.
6# 3,,
7# 4,960,total amount is 960 yen.