-1

何が起こっているのか信じられず、この問題を証明するのはとても簡単です。DAO を使用して、以下のコードを ACCESS DB に実行するだけです。

CREATE TABLE Table1(Field1 Single)

INSERT INTO Table1 (Field1) VALUES(9.99)

それで

SELECT * FROM [Table1]

結果は

フィールド 1 = 9,98999977111816

2000 行のようなものを挿入してからこのフィールドを合計すると、値が予想される値の合計から遠く離れ始めているため、これは大きな問題です。

さらに情報を追加すると、

通貨には格納する FieldSize = 15、Single には格納する FieldSize = 7 があります。ストレージの制限は私にとって非常に重要なので、Single を使用する必要があります。

ソリューションは非常に優れています。推測することは時間を失うことです。確かに反対票に値しません。

この問題についてはどうですか、同じ問題を抱えている人はいますか?それは文書化された問題ですか?この振る舞いについて話しましょう、私と一緒にいるのは誰ですか?

4

2 に答える 2

3

Currency uses 15 bytes to store

No, it doesn't. It uses 8 bytes to store and is accurate to 15 digits to the left of the decimal point (ref: here).

Single uses 7 bytes

No, it uses 4 bytes. However, it is a floating-point representation and hence has the limitations of any floating-point data type as described here:

Is floating point math broken?

If the extra storage space required to use Currency is a real problem for you then you should take another look at the overall design of your application. For example, if you are concerned about the 2GB limit for an Access table (database file) then perhaps the Access Database Engine is no longer the right tool for the job.

Addendum:

Thanks to @HansUp for reminding us that the limit was 1GB prior to Access 2000, and the OP is indeed using Access 97. After ~20 years, maybe it's time to upgrade to a more recent version of Access.

于 2016-08-08T15:55:13.297 に答える
3

表示されるのは、浮動小数点エラー、つまり制限です。

データに対して計算を実行する必要があり、小数点以下 4 桁を超える必要がない場合は、常にデータ型 Currency を使用する必要があります。

于 2016-08-08T14:27:30.953 に答える