Sql Firebird 2.5更改浮动字段的值

Sql Firebird 2.5更改浮动字段的值,sql,firebird,Sql,Firebird,我有一个Firebird数据库,其中有很多FLOAT类型的字段。我注意到在存储更大的值时出现了奇怪的行为。当我执行 UPDATE SOME_TABLE SET SOME_FIELD=2361431.70 值正在更改为2361431.75。字段随其他值而变化,但不随小值而变化。这真是令人惊讶。我在数据库中使用这种类型的字段。我曾考虑过将字段类型更改为十进制或数字,但对于使用许多浮点字段的数据库来说,这是相当困难的。浮点通常是近似数字。如果您想要精确的值,请不要使用浮点:大多数浮点的实现只能精确

我有一个Firebird数据库,其中有很多FLOAT类型的字段。我注意到在存储更大的值时出现了奇怪的行为。当我执行

UPDATE SOME_TABLE SET SOME_FIELD=2361431.70 

值正在更改为2361431.75。字段随其他值而变化,但不随小值而变化。这真是令人惊讶。我在数据库中使用这种类型的字段。我曾考虑过将字段类型更改为十进制或数字,但对于使用许多浮点字段的数据库来说,这是相当困难的。

浮点通常是近似数字。如果您想要精确的值,请不要使用
浮点
:大多数
浮点
的实现只能精确到小数点后7或8位。这就是为什么
float
能够表示介于10^308和10^-308之间的值,而只有64位信息(只有大约10^19个可能的值)。非常感谢。因此,我唯一能做的就是创建新的域十进制(15,4),并将所有的浮点字段转换成这个域,如果从浮点到数字的转换是很难做到的,考虑从浮点到双精度。它不会消除这些问题,但会给您带来更高的精度(准确地说是32位)。浮点通常是近似数字。如果您想要精确的值,请不要使用
Float
:大多数
Float
的实现只精确到小数点后7或8位。这就是为什么
float
能够表示介于10^308和10^-308之间的值,而只有64位信息(只有大约10^19个可能的值)。非常感谢。因此,我唯一能做的就是创建新的域十进制(15,4),并将所有的浮点字段转换成这个域,如果从浮点到数字的转换是很难做到的,考虑从浮点到双精度。它不会消除这些问题,但会给您带来更高的精度(精确地说是32位;)。