2008/10/06
【誰にでもできる!システム開発】消費税計算
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
『誰にでもできる!システム開発』 2008/10/06 号
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ご愛読、ありがとうございます。
このメールマガジンは、システム開発を始めたばかりの方、これから始める
方向けに、筆者が日頃から心がけていることをお話しています。
扱う内容については、テクニックと考え方を半分ずつで構成しています。
思っていた内容と違う、つまらない、読む気力が無くなったという方、
購読解除はこちらからできます。
http://www.mag2.com/m/0000263428.html
著者プロフィール
http://www.shiga-it-office.com/mailmagazine/writer.html
事務所概要
http://www.shiga-it-office.com/profile.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第20回 消費税計算
────────────────────────────────────
皆さんもご存知のとおり、現在の消費税率は5%(0.05)です。
なので、消費税額 = 税抜き額 × 0.05
になるのですが、コンピュータの場合には問題が起こる場合があります。
今回は、そんなお話です。
●実数の形式
コンピュータが実数(整数+小数)を扱うときは2つの形式があります。
「固定小数」と「浮動小数」です。
「固定小数」は、整数と小数の桁数を固定で表記します。
桁数が固定なので、精度を超えた桁数のデータを入れると、切り捨てられた
り、丸められたりすることがあります。
多くのプログラミング言語では、Decimalという型で使うことができます。
「浮動小数」は、仮数部と指数部で表記します。
例えば、1.5 に 1000 を掛けたとすると、1.5 × 10^3 というように指数部
が増えていきます。
固定小数とは違い、桁数は固定ではありません。
指数部を増やすことで桁が変わってくるので、扱える数値の範囲が大きいの
が特徴です。
プログラミング言語では、Real、Single、Float、Doubleなどの型になりま
す。
●小数を2進数にすると
第7回で説明したとおり、2進数では位が上がると数が倍に増えていきます。
(10進数では10倍になりますよね)
1 の位 → 2 の 0 乗の位
2 の位 → 2 の 1 乗の位
4 の位 → 2 の 2 乗の位
8 の位 → 2 の 3 乗の位
16 の位 → 2 の 4 乗の位
ですね。
では、1の位より下はどうでしょうか。
1 の位 → 2 の 0 乗の位
0.5 の位 → 2 の -1 乗の位
0.25 の位 → 2 の -2 乗の位
0.125 の位 → 2 の -3 乗の位
0.0625 の位 → 2 の -4 乗の位
ということになります。
位が下がると数が半分になっていく訳です。
分かりやすいように、0.1という数を2進数にしてみます。
1 の位 → 0
0.5 の位 → 0
0.25 の位 → 0
0.125 の位 → 0
0.0625 の位 → 1 (合計:0.0625)
0.03125 の位 → 1 (合計:0.09375)
0.015625 の位 → 0
0.0078125 の位 → 0
0.00390625 の位 → 1 (合計:0.09765625)
のように、0.1を超えないように位をどんどん下げていきます。
上の例では、2の-8乗まで書いていますが、0.1になる気配はありませんね。
実は、0.1はどこまで計算しても終わりが無いため、2進数では正確に表記す
ることができません。
このような小数を無限小数と言います。
0.1は無限小数なので、2進数では0.1に限りなく近づきますが、0.1ではあり
ません。
そのため、再び10進数に変換すると、0.999999999999… となってします。
プログラミング言語にもよりますが、0.1を10回足しても 1 にならないこと
を知っておいてください。
●消費税計算
消費税は 0.05 ですが、この数値は 0.1 の半分です。
つまり、0.1の結果を右に1桁シフトしたものと同じになりますので、0.05も
無限小数になります。
0.05が無限小数ということは、10進数に戻すと0.04999999… となるという
ことですね。
100円の商品を買ったとすると、
100 × 0.04999999… = 4.999999… 円となり、切捨てすると 4円になりま
す。1円足りなくなってしまいましたね。
このようなケースに対する対応策は2つあります。
1つ目は、計算式を工夫することです。
原因が0.05という小数値を使っていることが原因ですので、0.05を5÷100と
置き換えます。
100 × 5 ÷ 100 = 5 円となり、小数計算を使わなくなりますので、正常
な結果が求められます。
2つ目は、固定小数を使うことです。
Decimal型は、「2進化10進数」という形式を使っています。
「2進化10進数」は、それぞれの桁を10進数で表記しています。
つまり、各位に4ビット使い、「0000(0)」から「1001(9)」で表します。
こうすることで、10進数を扱うことができます。
10進数ですから、誤差が無く計算できるのですが、浮動小数よりも計算速度
が遅くなりますので、大量の計算を行う場合は不向きなこともあります。
(小さな誤差を無視できる場合ですが)
------------------------------------------------------------------------
■編集後記
最後までお読みいただき、ありがとうございました。
最近、パソコンの調子が悪いです。
もう4年近く毎日使っているので寿命かもしれません。
そこで、最近のパソコンのトレンドを調べてみると、低価格・低消費電力な
パソコンに人気があるようです。
今のパソコンを作成した当時は、IntelとAMDがクロック競争をしていた頃な
ので、消費電力が凄まじく、夏場はファンの音がちょっとした騒音です。
あれだけクロック競争をしていたのが嘘のように、今度は低消費電力競争に
なりつつあって、ブームに踊らされているような気もしますが、電気代の節
約になるのはありがたいですね。
来週月曜日は体育の日で休みのため、次回発行は10月20日になります。
ご感想・ご意見・ご要望などありましたら、気軽にご連絡ください♪
では、また来週お会いしましょう!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
『誰にでもできる!システム開発』 2008/10/06 号
本日のメールマガジンを読んだ感想をお聞かせください。
お寄せいただいた感想は、メールマガジン上で紹介させていただくことが
ありますので、ご了承ください。
配信中止はこちらから↓
http://www.mag2.com/m/0000263428.html
メールアドレスの変更はこちらから↓
http://www.mag2.com/m/0000263428.html
ご意見&ご感想はこちらから↓
http://www.shiga-it-office.com/mailmagazine/ImpressionFrom.html
コンサルティングのご相談はこちらから↓
http://www.shiga-it-office.com/inquiry.html
発行元 志賀IT事務所
http://www.shiga-it-office.com/
関連メールマガジン 「誰にでもできる!インターネット活用術」
http://www.mag2.com/m/0000263426.html
関連ブログ
☆コンサル日和
http://d.hatena.ne.jp/kei_onpu/
☆爆裂!C#野郎
http://csharp.yaminabe.info/
☆10年戦える開発技術
http://10year.yaminabe.info/
☆情報処理技術者試験午前対策
http://am.yaminabe.info/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━



