今天一同事发现,往数据库插入一字段值为400000.18,库中变成400000.19,字段为float类型。(以下讨论皆针对单精度浮点)
找了下资料,浮点型运算基本按照IEEE-754格式标准,FLOAT是由4个字节(32位)组成:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S: 第一位:表示浮点数正负,1为负数,0为正数
E: 指数加上127后的值的二进制数
M: 24-bit的底数(由于符号位已经由S标识了,只存储23-bit)
按照上图,浮点型最多只能精确2^23内的整数,但由于IEEE754标准对底数格式作了规范:即二进制的1.xxxxx,因此底数小数点左面部分总是1,在这里,为了提高精度,把1省略了,因此实际上最多能精确到2^24-1(即16777215)内的整数。由此可见,整数最大可保证精度为7位。
至于带小数的处理,由于小数位与整数位是分开计算,而且由于小数位独特的转二进制方法,可能存在无限循环,决定了浮点的小数位无法做到100%精确,使带小数的浮点精度更低。直到现在,我还不解为何转二进制采用乘2取整如此独特的方法,正是因为这种方法导致小数位无法像整数位一般精确。
结论:单精度浮点最大可保证精度是7位(xxxxx.xx),JAVA中的浮点型,如果需要7位数值以上的精确度,就换成BigDecimal(推荐)或double型(52bit底数,15位精确度),在MYSQL中则推荐采用DECIMAL(x,y)。
标准参考:http://en.wikipedia.org/wiki/IEEE_754-2008
分享到:
相关推荐
国际绝对音名十二等律标准音高频率对照表(浮点型精度、十二等律体系、A4=440.01000Hz) https://blog.csdn.net/weixin_53403301/article/details/121737931
在处理数据时,经常会遇到需要将双精度浮点型数据(Real)转换为单精度浮点型数据(Float)的情况。双精度和单精度浮点数在计算机中以二进制形式表示,双精度占用64位(8字节),而单精度占用32位(4字节)。在S7-...
本主题聚焦于一个特定的工具或源码,即“16进制单精度(32位)浮点型转换器”,它能够将32位的浮点数在16进制表示与十进制表示之间进行转换,并考虑到了不同的字节序——大端和小端。 首先,我们要理解16进制和...
在双精度浮点型和十六进制之间的转换中,需要将二进制数按照IEEE 754的格式拆分,然后将每个8位的字节转换为对应的十六进制字符。相反,从十六进制转换回来时,需要将每个字符转换为8位二进制,再根据IEEE 754的标准...
labview_32位单精度浮点数转定点小数,亲测可用(Own use labview to build 32-bit single precision floating point decimal turn, pro-test available)
LabVIEW的“二进制到浮点”函数可以自动完成这个复杂的解码过程。 5. **生成双精度浮点数**:最后,LabVIEW会根据解析出的信息生成一个双精度浮点数。这个数值可以直接在程序中使用,也可以通过数据显示出来供用户...
LabVIEW中的数据类型包含各种数值类型,如整型、单精度浮点、双精度浮点等。在进行16进制字符串到双精度浮点数的转换时,LabVIEW提供了相应的函数和VI(Virtual Instruments)来实现这一过程。这些函数通常会先将16...
该函数接受两个浮点数作为输入参数,并返回一个逻辑值(true或false),指示这两个数在浮点精度范围内是否相等。这个函数考虑了浮点数的精度限制,使用了一种容差(tolerance)策略来进行比较,而不是简单的直接比较...
4. cJSON_Number:表示数值类型的JSON值,包括整型和浮点型。 5. cJSON_True / cJSON_False:表示布尔类型的JSON值。 6. cJSON_NULL:表示null类型的JSON值。 cJSON库提供了解析JSON字符串为C语言数据结构(cJSON_...
浮点型和二进制转换是计算机科学中的基础概念,特别是在处理数值计算和数据存储时。浮点型是一种表示实数的方式,它基于科学计数法的概念,而在计算机内部,所有的数据都以二进制形式存在,包括浮点数。在编程中,...
单精度浮点转换是计算机科学中的一个重要概念,特别是在数值计算、数据存储和处理领域。它是一种数据类型,用于表示带有小数部分的数值,通常占用32位的二进制空间。这种格式由国际标准组织IEEE 754定义,被广泛应用...
在本实例中,我们将讨论如何将遵循 IEEE 754 标准的单精度浮点型数据转换为字符型数组,以便于存储或传输。 单精度浮点型数据在 IEEE 754 中占用32位,这32位被分为四个部分:符号位(1位)、指数部分(8位)和尾数...
标题 "精度浮点转换器源码 (By Greatboy)" 提供了一个关键信息,即这是一个用于转换和显示IEEE浮点数的程序。浮点数在计算机科学中是表示实数的一种方式,尤其在数学计算和科学计算中至关重要。IEEE是电气和电子...
1.C语言精度设置(浮点型)案例代码 2.适合C语言初学者学习 3.建议与C语言精度设置(整数型)案例代码对比学习 4.永久免费下载本资源
单精度浮点型(float)是IEEE 754标准中的一种数据类型,主要用于存储和处理浮点数,通常占用32位(4字节)。在C语言中,理解和操作IEEE 754单精度浮点型数据是编程的重要部分,尤其是在数值计算、科学计算和游戏...
java double:双精度浮点型
java float:单精度浮点型
"C语言单精度浮点转换工具"是一款专为C语言开发者设计的小型实用程序,它能帮助将16进制32位数据转化为浮点数。这个功能在特定情况下非常有用,比如当开发者需要处理存储在内存或文件中的二进制浮点数据时。 首先,...
浮点数转化器,单精度浮点计算软件,FLOAT转HEX
3. **浮点型(Float)**:浮点型是单精度浮点数,大约介于-3.4E38和1.2E38之间,占用4个字节。浮点型数据用于存储带有小数部分的数值,适合连续性数据的测量和计算。 4. **双精度(Double)**:双精度浮点数提供了...