FLOAT类型存储值的例子问题

Question of an example for storing value of FLOAT type

我读了一本书和一个关于 FLOAT 值的例子,

Data type : FLOAT

Original Value : 1234567.89

Value stored : 1234570 

Byte used : 4

我想知道的是,如果 FLOAT 最多可以保存 7 位数字,那么为什么存储值是 1234570 而不是 1234568,

那为什么这个例子把这个值从单位(我的意思是小数点左边的第一个数字)舍入。

谢谢



========编辑==================================

我的书是Murach的MySQL,很抱歉,这是我的错,其实这本书并没有像我上面说的那样告诉“FLOAT最多可以保存7位数字”,

我想我误解了这句话的意思

The FLOAT type can be used to store a single-precision number, which provides for numbers with up to 7 significant digits. - p238 from Murach's MySQL 3rd edition

============================添加测试结果============

我刚刚测试了 FLOAT 和 DOUBLE 类型,相同的输入和不同的输出

FLOAT 在最后一个数字处始终显示 0。

DOUBLE 正在保留号码。

如您所见,我很好奇,Float 不会在 65.00 处向上舍入数字('=====' 的第二行)。我还不明白为什么会这样..

如果某些消息来源说FLOAT可以“最多保存7位数字”,那是错误的。

当使用 IEEE-754 binary32 格式时,数字使用二进制数字表示,而不是十进制数字。十进制数字和二进制数字之间没有精确的对应关系。 binary32 格式的精度足以将范围内的任何六位十进制数转换为 binary32,并且当转换回六位十进制数时,结果将相等。 (这里的六位十进制数是指有六位有效数字的数字,如123456000、1.23456•10−13等。)

许多更长的十进制数可以无变化地转换为 binary32 并返回,但这取决于它们是否与格式中可表示的数字一致。

对于 1234567.89,二进制 32 格式中可表示的最接近数字是 1234567.875。这是将其转换为 binary32 格式后应产生的值。如果打印了“1234570”,我认为这是为了显示而四舍五入到六位有效数字的结果,因此没有显示真实值。另一种可能性是使用的位数少于 binary32 有效位数中支持的 24 位。