Floating point 关于存储浮点型值的示例问题

Floating point 关于存储浮点型值的示例问题,floating-point,sqldatatypes,Floating Point,Sqldatatypes,我读了一本书和一个关于浮动值的例子 Data type : FLOAT Original Value : 1234567.89 Value stored : 1234570 Byte used : 4 我想知道的是,如果FLOAT最多可以保存7位,那么为什么存储值是1234570而不是1234568 那么为什么这个例子要从单位(我是指小数点左边的第一个数字)取整这个值呢 多谢各位 ==========编辑================================== 我的书是M

我读了一本书和一个关于浮动值的例子

Data type : FLOAT

Original Value : 1234567.89

Value stored : 1234570 

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

那么为什么这个例子要从单位(我是指小数点左边的第一个数字)取整这个值呢

多谢各位



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

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

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

浮点型可用于存储单个精度的数字,该数字最多可提供7位有效数字。-第38页来自Murach的MySQL第三版

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

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

浮点数在最后一个数字处始终显示0

DOUBLE保留这个号码

正如你们所看到的,我很好奇,Float并没有将数字四舍五入到65.00(从“==”开始的第二行)。我还不明白为什么会发生这种事。。

如果一些信息来源说
FLOAT
可以“最多保存7位数字”,那么这是错误的

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

许多较长的十进制数可以转换为二进制32并返回而不作更改,但这取决于它们与格式中可表示的数字的一致性


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

十进制数字和二进制数字之间没有精确的对应关系。也许这应该被替换为:不是所有的有限十进制数都有一个等价的有限二进制数,反之亦然(或在这些行中的某些内容)(例如,十进制0.1是二进制0.000110011…)。有一个精确的对应,它是基转换。(或者我误解了这句话?@kvantour所有的有限二进制数都有一个等价的有限十进制数。@chux是的。。我颠倒了角色,我只是编辑了我的问题,实际上我还没有完全理解,我只是在mysql中测试了这个,然后我得到了一个值“1234570”作为示例。那么这是否意味着Mysql对四舍五入到六个重要数字的显示结果有默认设置?