![]() |
||
<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ![]() |
|
![]() |
||
MS-Access2000--昨日の2倍の宝石をください |
では・・・先に用意したレポートに、フィールドをいくつか設けましょう。
数値は、「倍精度浮動小数点型」という数値型にしてみました。Doubleってやつですね。
数値型じゃなくて通貨型を選んでもいいかもしれないですね。
これは、なかなか理解のしにくいところではあるんですけれど・・・コンピュータというものは、多少「誤差」を生みます。
わたしたちのように「10進数」で計算をしているわけではないので、ほんとに細かいレベルで、端数の処理の仕方がネックになって、誤差が生じることがあるんです。これはAccessのせいでもWindowsのせいでもなく、昔からずっと「コンピュータ全般」でずっとずっと問題になっていることです。バグとかそういう言い方をしてはいけないですよ。コンピュータは常に「端数処理」と戦っているものなんです。
誤差が生じる最も大きな原因が「小数点」にあります。
数値は、計算結果を出してみないと「何桁あって、小数点以下が何桁か」わからないですよね。わからない桁数に柔軟に対応するために用意された数値型というものは、やはりそれだけ誤差を生む危険性を帯びているわけです。
なんて、こんなこと書いて脅してしまってはいけませんが・・・とにかく、なるべくなら、小数点以下の数字を扱う必要がない(金額とか個数とか)の場合は、小数点以下の値が発生しない数値型・・・あるいは、少雨数点以下の桁数があらかじめ決められている数値型を選ぶとよいでしょう。誤差が生じにくくなります。
端数による誤差というものは・・・情報処理の非常に根の深い部分のお話です。
こういうことに関して記述している書籍もいくつかありますし、マイクロソフトのサイトにも情報がありますので、興味ある方は一度目を通してみてください。
今回は、Doubleで作っちゃったんですけど・・・複雑な計算などが多数含まれるシステムの場合は、数値の「型」ってけっこう大切です。
データ型 記憶領域のサイズ 範囲 バイト型 (Byte) 1 バイト 0 〜 255 整数型 (Integer) 2 バイト -32,768 〜 32,767 長整数型 (Long) 4 バイト -2,147,483,648 〜2,147,483,647 単精度浮動小数点数型 (Single) 4 バイト -3.402823E38 〜 -1.401298E-45 (負の値)。 1.401298E-45 〜 3.402823E38 (正の値)。 倍精度浮動小数点数型 (Double) 8 バイト -1.79769313486231E308 〜 -4.94065645841247E-324 (負の値)。 4.94065645841247E-324 〜 1.79769313486232E308 (正の値)。 通貨型 (Currency) 8 バイト -922,337,203,685,477.5808 〜 922,337,203,685,477.5807 10 進型 (Decimal) 14 バイト 小数部分を持たない数値の場合、-79,228,162,514,264,337,593,543,950,335 〜 79,228,162,514,264,337,593,543,950,335 の範囲の値をとります。小数点以下 28 桁の数値の場合、-7.9228162514264337593543950335 〜 7.9228162514264337593543950335 の範囲の値をとります。絶対値の最小値は 0 を除いた場合、0.0000000000000000000000000001 です。
じゃあ、作ってみましょうか。
特別新しいステートメントはありませんので、編集可能な(更新クエリみたいな感じの)作り方になりますね。
まずは、忘れないうちに、「開いて 〜 閉じる」の部分だけ書いてしまいましょう。
で、間に処理を書き込んでいきます。
テーブルに31レコード入力してあるので・・・テーブルのおしまいレコードまで処理を繰り返します。
で、テーブル1(変数r1っていうことで宣言してますが)の各フィールドに、さっきフォーム上で作った計算式と同じロジックの式を入れます。
今回は「テーブルの中の[何日目]というフィールドの中の数字を計算式に使ってます。
まず、1日目か、そうでないかを判断して・・・。
次に、↓合計を出します。あと姉さんたちの計算というか、代入しましょうか。
MoveNextを忘れないように!
入力できたら、いちおう[デバッグ]メニューの中の[コンパイル]を選んでコンパイルしておき、実行してみましょうか。
めんどくさいからメニューバーから実行しちゃおうかな。
別に何の音沙汰もありませんが・・・。
テーブル1を開いてみてみると、値、入ってきてると思います。
ま、できないことはないですけどね。。。。
でも、こういうお仕事は、やっぱりExcelの方が便利ですね・・・・・。
あ、で、もうひとりの姉さんが一番取り分少ないんですね。ははは。なんかかわいそうかも。
![]() |
![]() |
![]() |