いつも助けられています。
Accessのデータ型についてどなたか教えてください。
長整数型は整数しか指定できないのはわかります。
ただし、10.5と入れると「10」で、「10.6」と入れると「11」になるのがわかりません。
小数点処理は、四捨五入ではないのでしょうか?
何か特別な規則があるのでしょうか?
お分かりになる方、よろしくお願いします。

A 回答 (3件)

かきこ間違えでした。

すみません
>0からの差が合計で1.0ですよね((1-0.5)+(1-0.6)+(1-0.7)+(1-0.8)+(0.9)=1.5)



1からの差が合計で1.5ですよね((1-0.5)+(1-0.6)+(1-0.7)+(1-0.8)+(0.9)=1.5)

です。
    • good
    • 0
この回答へのお礼

大変ありがとうございます。
よくわかりました。
なるほど、四捨五入とは、小学校で覚えて単純なものでないことが良くわかりました。
Excelという言葉が大変ヒントになりました。
EXCELの技術情報に教えていただいたとおり「銀行型」として存在しました。
あれ以来、公式な見解が無いものかと毎晩探し回っていました。
ご丁寧な説明をして頂けたおかげで、よりはっきりとわかりました。
何度もありがとうございました。

お礼日時:2002/03/07 04:10

またまた、こんにちわ


探せなかったですか・・・きっとどこかにあるとは思いますが
簡単な補足をしておきます。
普通の四捨五入だと
0.1、0.2、0.3、0.4
の4つが切り捨てで(0も含めると5つ)
0からの差が合計で1.0ですよね(0.0+0.1+0.2+0.3+0.4=1.0)
0.5、0.6、0.7、0.8、0.9
の5つが切り上げですよね
0からの差が合計で1.0ですよね((1-0.5)+(1-0.6)+(1-0.7)+(1-0.8)+(0.9)=1.5)
そうすると切り上げの方が多いですよね。
結局普通の四捨五入だと切り上げの方に計算が偏ってしまうわけです。
これを解決するためにそのような計算結果になるようです。
Accessだけでなくエクセルでも採用されているようです。
なにやら「銀行型」とか「ISO」とか呼ばれているようですが?
    • good
    • 0

それは誤差を少なくする丸め方だったようなきがします。


0.5を偶数の方に丸めるはずなので

7.5→8
8.5→8
9.5→10
10.5→10
11.5→12

という風になります。
確か「おしえてgoo」でも出ていたような気がします。
詳しくはここで検索してみては?
    • good
    • 0
この回答へのお礼

ありがとうございます。
なるほど、教えてもらったとおりになります。
しかし、小数点第2位が入ると必ず繰り上がります。
(10.51等)おしえてgooでは探しきれませんでした。
いずれにしても、早々の回答感謝します。

お礼日時:2002/03/05 04:43

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q五捨五入

エクセルで五捨五入を行う場合は、どのような数式を作成すればよいのでしょうか。また、VBAでround関数を使うと五捨五入になると聞いたのですが、どのようなユーザー定義になるのですか。よろしくお願いします。

Aベストアンサー

こんにちは。

通常、偶数丸め(銀行型丸め)というと思いますが、ExcelのVBAでは、偶数丸めというのは、Excel2000 から採用されましたので、歴史的にも浅いです。いわゆる、2進の計算で、浮動小数点誤差丸めに、正式な名称「最近接偶数丸め」として出てくるだけで、実務上でワークシートなどで使う場を知りません。統計には出てくるそうですが、なぜ、銀行型丸め(Banker's Rounding)というのか、そういう歴史的な背景を私は知りません。

ご質問者さんが、どういう状況で必要になるのか少し興味を持ちました。以前にもそのような質問に出会ったことがありました。

現実的な対応は、VBAのユーザー定義関数を使うにしても、原理は、以下のようになるはずです。以下の数式を見れば分かるとおり、

丸める桁が、奇数の場合、その下の桁の数字を四捨五入、偶数の場合は、下の桁が上の桁の半分よりも小さい場合は切り捨てになりますね。

=IF(MOD(INT(MOD(ABS(A1),10)),2),
SIGN(A1)*ROUND(ABS(A1),0),
SIGN(A1)*ROUND(ROUNDDOWN(ABS(A1),0)+(ABS(A1)>(ROUNDDOWN(ABS(A1),0)+0.5))*0.5,0))

小数点第一位の場合は、

=IF(MOD(INT(MOD(ABS(A1)*10,10)),2),
SIGN(A1)*ROUND(ABS(A1),1),
SIGN(A1)*ROUND(ROUNDDOWN(ABS(A1),1)+(ABS(A1)>(ROUNDDOWN(ABS(A1),1)+0.05))*0.05,1))

少し、数式は、ややこしいですが、理屈は、単純なことだ思います。

質問者さんが、銀行型丸めを要求している話で、既存のVBAのRound関数をそのまま使う分には、出された結果がそのとおりだと思います。

>少数桁が大量にあった場合(?)は、どのように設定すればよろしいでしょうか。
>このVBAをしようした場合の有効桁は2ケタということになりますでしょうか。

そのままの計算でしたら、有効桁数は関係ないのではありませんか?
つまり、浮動小数点の無限小数が存在していても、判定が、その半分よりも大きい・小さいには、有効桁数はありませんね。

>たとえば、2.501だった場合は「2」にはならず「3」になるということでしょうか。

私が説明してよければ、こういうことになると思います。
1桁で丸める場合は、1桁が偶数2だから、その下の桁の数値0.501が、丸める桁の半分0.5よりも多いので、四捨五入されて、3になります。2.5でしたら、半分[よりも]大きくない(以上ではなくて)ので、切捨てになるという仕組みだと思います。だから、Excelの仕様の小数点第16位以降は別としても、基本的には有効桁数は関係ありませんね。

ただ、私は実際には出会ったことのない計算です。

こんにちは。

通常、偶数丸め(銀行型丸め)というと思いますが、ExcelのVBAでは、偶数丸めというのは、Excel2000 から採用されましたので、歴史的にも浅いです。いわゆる、2進の計算で、浮動小数点誤差丸めに、正式な名称「最近接偶数丸め」として出てくるだけで、実務上でワークシートなどで使う場を知りません。統計には出てくるそうですが、なぜ、銀行型丸め(Banker's Rounding)というのか、そういう歴史的な背景を私は知りません。

ご質問者さんが、どういう状況で必要になるのか少し興味を持ちました...続きを読む

QAccess 倍精度浮動小数点型について。。。

アクセスの、倍精度浮動小数点型で定義したテーブルを作成しました。
で、その項目に 99999999 とデータを入力した場合にデータが100000000
に自動変換されてしまいました。 
このような自動変換について何か情報をお持ちのお方、お教え願います。
また、使用しているオフィスは office2000 です。

追記
8桁以上の数値入力では、数値の丸めが発生しました
7桁以下の場合は、丸めは行われませんでした。

よろしくお願いします。

Aベストアンサー

  何で丸められるかはほかの詳しい方にお任せするとして、どうしても必要な場合を除いて浮動小数点はヤメた方がいいですよ。
 小数点以下4桁以上必要になる事がまずないので自分は通貨型を使っています。

Qアクセスのデータ形式で「長整数型」とはどんなものですか

ACCESS 2003 です。
アクセスのデータ形式で「長整数型」というのがありますが、他の[整数型]
とはどこがどのように違うのでしょうか、また、どのような場合に使うのでしょうか。

以上宜しくお願いします。

Aベストアンサー

こちらがまとまっていますね。
http://www.geocities.co.jp/Foodpia/2035/study/access/kihon/exp02_02.htm

フィールドの値を越えない範囲で最小のサイズを選択するようにします。

Qstringのデータ型はメモ型とテキスト型どちらがいいのでしょうか?

こんばんは。
アクセスで
100文字のデータを入力したい場合、
フィールドのデータ型は
テキスト型にしてフィールドサイズを100にするのと、
メモ型にするのとどちらがいいのでしょうか?

Aベストアンサー

私も、No.1の方と同じく「テキスト型でフィールドサイズ指定」を
推奨します。

ただ、元々は(といっても私が知ってるのはAccess97以降ですが)、
・テキスト型:
  文字数の上限が小さいが、インデックスを設定可能
・メモ型:
  文字数の上限が大きいが、インデックスは設定不可
ということで、

a)サイズの上限に引っかかる場合はメモ型
b)完全一致検索(+先頭一致検索も?)や並べ替えを行う必要がある
 (かつ、サイズが255文字以内)ならテキスト型、

という使い分けだったと思うのですが(以前の回答もその前提)、
http://oshiete1.goo.ne.jp/qa3188809.html

改めて調べてみたところ、Access2002以降ではメモ型の場合にも
インデックスが作成可能になっていました(汗)
http://support.microsoft.com/kb/302525/ja
(『詳細』の項目のところに、「この現象は、Microsoft Access 2000
 より前のバージョンの Microsoft Access では発生しません。
 これは、Jet 3.5 以前ではメモ型フィールドにインデックスを付ける
 ことができないためです。」とあります:
 でもAccess2003のヘルプ(テーブルのデザインビューで『データ型』
 のところにフォーカスを移動してF1キーを押す)には、以前のまま
 「メモ型、ハイパーリンク型、および OLE オブジェクト型のフィールド
 には、インデックスを設定できません。」と書かれているのですが(汗))


・・・ということなので、「文字数を制限したいかどうか」で決めればいい、
ということではないかと思います。
(従って、「100文字まで」と上限を設定したい今回の場合はテキスト型、と)

私も、No.1の方と同じく「テキスト型でフィールドサイズ指定」を
推奨します。

ただ、元々は(といっても私が知ってるのはAccess97以降ですが)、
・テキスト型:
  文字数の上限が小さいが、インデックスを設定可能
・メモ型:
  文字数の上限が大きいが、インデックスは設定不可
ということで、

a)サイズの上限に引っかかる場合はメモ型
b)完全一致検索(+先頭一致検索も?)や並べ替えを行う必要がある
 (かつ、サイズが255文字以内)ならテキスト型、

という使い分けだったと思うのですが(以...続きを読む

QACCESS2000数値型⇒テキスト型変換

ACCESS2000でクエリーで例えば25.0の数値を"25.0"そのままの形の文字列に変換したいのですが、Formt関数とか使っても"25"になってしまいます。"25.0"と表示させる方法ないでしょうか?お願いします。

Aベストアンサー

> 「#」は値が該当の桁の値がゼロ、または存在しないときに表示を抑止することを意味し、
> 「0」は該当の桁の値がゼロ、または存在しないときに0を表示することを意味します。

下記に訂正します。

「#」は値が該当の桁が存在しないときに表示を抑止することを意味し、「0」は該当の桁が存在しないときに0を表示することを意味します。


このカテゴリの人気Q&Aランキング

おすすめ情報