重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話になっております。ACCESS勉強中です。

ACCESSで金額を扱うときには型は「通貨型」を使用しているのですが
先日、ある人から「数値型」でもいいじゃないの?
とのお話を聞きました。

「数値型」を選択するメリットがありましたら、教えて頂けると
助かります。

よろしくお願いします

A 回答 (3件)

>「数値型」でもいいじゃないの?


「いいじゃない」レベルではありません。
金額を扱う場合は演算誤差を避ける必要が
あります。2進法を使う限り実数演算では
誤差が出ます。
よって、通貨型も適切ではありません。
数値型→十進型を使うべきです。
データ容量、演算速度とも不利ですが、
人間の計算と同じ結果になるのが最大の
メリットです。
それに、容量や速度と言っても、僅かな
問題です。
    • good
    • 0
この回答へのお礼

おおおーーー
数値型→十進型
なるものが あるのですね すごく勉強になりました
「人間の計算と同じ結果」言葉の響に魅力があります

ありがとうございました

お礼日時:2010/03/04 18:25

数値型のメリットは、格納領域が通貨型よりも少なくて済むことです。


でも、それくらいです。
金額を扱う際の致命的なデメリットとして、四則演算で円未満の端数が出ると容易に浮動小数点誤差が発生する問題があります。詳しくは「浮動小数点誤差」あたりで検索していただくと、詳しい解説をたくさん入手できます。
この問題があるがために、金額に代表される、誤差を極力抑える必要のあるデータに関しては、固定小数点の通貨型を用いるのが一般的になっています。

金額でも、処理が円単位の単純合計しかしないとか、またはあるていどの誤差を許容するようなレアな状況だと、他の要素を考慮して数値型を選択する可能性もなくはないです。ただ拡張時のリスクを考えあわせると、数値型を採用するのは相当珍しいと言えます。少なくとも、一般論で「数値型でもいい」という発言がプロから出ることは、まず有りえないです。

設計時に安易に数値型を設定してしまったため、問題が発覚した時点ではもうテーブル設計を変えられなくて、泣く泣く演算箇所を片っ端から CCur() で通貨型に変換してまわる破目になった話を定期的に掲示板で見かけますので、一種の保険の意味でも金額はすべて通貨型にしておくことをお勧めします。

余談ですが、扱う金額の範囲が小さいからデータ型もそれに合わせればよいという考え方は非常に危険です。わたしは演算処理に使われない金額を見たことがありませんので、必ず何らかの演算に使用されることを前提に考えますが、演算中では一時的に、使用する金額の数万倍とか数億倍の値になることがあります。典型的な例として、小数点第n位での四捨五入をする際、いったん10^n倍してから円未満の端数を処理して10^n割で戻すという方法が使われる場合があります。そうすると、「そんな国家予算みたいな額は扱うわけない」と言って小さく設定したデータ型では、10^n倍した時点でオーバーフローするかもしれません。その意味でも、金額は通貨型で扱ったほうがよいです。

もうひとつ、数値演算は小さいデータ型の方が速いというのは一般論としてありますが、小数点以下を扱う型の場合は話が別で、浮動小数点よりも固定小数点 (通貨型) の方が (小数点位置の決定コストが無い分) 速いといわれています。その観点からも、通貨型の方がお勧めです。
    • good
    • 0
この回答へのお礼

のもすごく御丁寧な御回答ありがとうございます。
「数値型」の選択は、やはりなさそうです
(もともとMSが準備しているものでもありますし)
一読して、意味が分からない部分が少しありましたが、
私にはまだ、今後の研究課題がまだあるとの認識頂きました。
ありがとうございます。

お礼日時:2010/03/04 18:30

どの程度の範囲のお金を扱うかによります。


1円単位で20億円ぐらいまで、赤字も20億円ぐらいまでということなら「数値型でもいいんじゃないの」です。「いいんじゃないの」であって、メリットを特に考えていないでしょう。
一応、領域は少なくなります。整数型のが処理速度も速いです。
数値型で4バイト整数でしたら上記の範囲です。通貨型は8バイトです。32ビットパソコンでしたら32ビットつまり4バイト単位での処理です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す