誰にでもできる!システム開発  RSSを登録する

73%は失敗と言われている、システム開発プロジェクトを成功させるためのテクニックや考え方をお届けします。新人エンジニアが失敗しやすいポイントも詳しく解説しています。

現在休刊中です    
解除

規約に同意して

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/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
現在休刊中です
解除

規約に同意して

最近の記事

上へ戻る