首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么双精度字段的Sum有两个以上的小数位

双精度字段的Sum有两个以上的小数位是因为双精度浮点数在计算机中的表示方式导致的。

双精度浮点数是一种用于表示实数的数据类型,通常由64位二进制数表示。其中,1位用于表示符号位(正负),11位用于表示指数部分,剩下的52位用于表示尾数部分。这种表示方式可以提供较高的精度和范围。

然而,由于计算机内部使用二进制进行计算,而实数通常是十进制表示,存在着二进制和十进制之间的转换问题。这就导致了在进行浮点数计算时可能出现舍入误差,从而产生多个小数位。

舍入误差是由于浮点数的精度有限,无法精确表示某些十进制数,因此在计算过程中会进行舍入。这种舍入误差会在多次计算中累积,导致最终结果的小数位数增加。

另外,浮点数的运算也受到计算机内部的浮点数运算单元的限制。这些运算单元通常采用固定的位数进行计算,可能无法精确表示某些小数位数,从而导致结果的小数位数增加。

总之,双精度字段的Sum有两个以上的小数位是由于双精度浮点数的表示方式以及计算机内部的浮点数运算导致的舍入误差和精度限制。在实际应用中,我们需要注意浮点数计算可能产生的舍入误差,并根据具体需求进行适当的处理。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【mysql】浮点类型

MySQL支持浮点数类型,分别是 FLOAT、DOUBLE、REAL。 FLOAT 表示单精度浮点数; DOUBLE 表示精度浮点数; [在这里插入图片描述] REAL默认就是 DOUBLE。...问题2: 为什么浮点数类型无符号数取值范围,只相当于符号数取值范围一半,也就是只相当于符号数取值范围大于等于零部分呢?...因此, 所谓无符号数取值范围,其实就是符号数取值范围大于等于零部分。 2. 数据精度说明 对于浮点类型,在MySQL中单精度值使用4个字节,精度值使用8个字节。...精度误差说明 浮点数类型个缺陷,就是不精准。下面我来重点解释一下为什么 MySQL 浮点数不够精准。...比如,我们设计一个表,f1这个字段,插入值分别为0.47,0.44,0.19,我们期待运行结果是:0.47 + 0.44 + 0.19 = 1.1。

2.5K20

为什么两个表建立数据关系问题?

小勤:大海,为什么我这两个简单表建立数据关系问题啊? 大海:啊?出什么问题了?...里面有两个小米,一个是宏仁生产,一个是德昌生产。但是,产品名称重复不行吗? 大海:当然不行啊,你产品名称是重复,我怎么知道订单明细表里产品应该对应你产品表里哪一个啊?让这两个小米要打一架?...大海:那你能保证用vlookup查到结果是你想要吗? 小勤:啊,也对,vlookup都是返回最先找到一个,这可能是错。 大海:所以说,仔细想想,这种逻辑是不能成立。...小勤:啊,知道了,看来我还是得把订单明细表里产品ID放出来,不然做出来数据分析都是不对。 大海:很棒,这么快就想到产品ID问题了。...小勤:你上次《表间关系一线牵,何须匹配重复拼数据》文章里不是提醒吗?只是我没想到我数据那么快就存在这种情况。 大海:呵呵,名称重复情况太正常了,所以尽可能都用ID编码。

1.1K20
  • MySQL DDL 操作

    ☞ 示例   为什么只使用了 zerofill 也会补 0,我们查看建表语句会发现,使用了 zerofill 会自动将无符号数提升为符号数,等同于使用了 unsigned zerofill 。...1.3.3 浮点类型   float 数值类型用于表示单精度浮点数值,而 double 数值类型用于表示精度浮点数值,float 和 double 都是浮点型,而 decimal 是定点型。...decimal 采用是四舍五入,float 和 double 采用是四舍六入五成(就是 5 以下舍弃 5 以上进位,如果需要处理数字为 5 时候,需要看 5 后面是否还有不为 0 任何数字,如果有...数据类型 说明 float(m,n) 单精度浮点型 8位精度(4字节) m 总个数,n小数位 double(m,n) 精度浮点型 16位精度(8字节) m 总个数,n小数位 decimal(m,n)...timestamp,该字段存放时间戳会随表中其他字段修改时候自动刷新。

    1.2K41

    MySQL学习3_数据类型、字段及运算符

    本篇博文中主要是介绍MySQL数据库中数据类型和字段、运算符相关知识 数据类型 MySQL数据库中主要数据类型四种: 数值类型 浮点型 字符串类型 日期时间类型 数值类型 一般情况下:用int就可以...超过了最大值,以最大值为准 image.png 浮点类型 float(m,d):单精度,8位精度;m表示总个数,d表示小数位 double(m,d):精度,16位精度;m表示总个数,d表示小数位...decimal(m,d):定点数,m表示总长度,d表示小数位 image.png 字符串类型 用最多是char和varchar以及text,其中 char:定长,不够补空格,多了减掉;比如char...(10):输入12345678**,后面自动补两个空格。...常用来修饰字段: image.png 修饰语 作用 unsigned 无符号 auto_increment 自增 default 默认值 comment 字段解释说明 not null 非空 null

    88210

    XCode最佳实践之最佳数据类型

    精度Fload精度Double,建议一律用Double,否则不同数据库很难统一,还有千万小心精度设置和小数位数,XCode反向工程可能不能把精度小数位数完美的迁移到其它类型数据库,同类型没有问题。...Decimal,货币类型必须有的,对应MSSQLMoney。开发时候小心,不要拿Decimal判断两个值是否相等,应该相减判断差值是否小于0.000001,这个小数自己看情况定。 7,时间日期。...字符串类型是唯一完整支持不同数据库设置长度以上类型全部不能完整支持。 9,大文本。String,在MSSQL一律用ntext。...XCode支持迁移自增字段数据,当然,如果需要合并数据,那得自己处理逻辑 2,建立各种索引。...1,除了字符串长度外,其它类型绝对绝对,尽可能不要设置其它属性,包括长度、精度小数位数,否则XCode不能实现完美迁移 2,XCode目前不支持各种数据库外键。

    1.1K60

    计算误差真相:为什么 float 加法会出现精度损失?

    在大多数编程语言中,float类型通常使用32位来表示,也被称为“单精度浮点数”或“单精度实数”。它可以表示数值范围比整数类型要大得多,并且可以存储小数位数较多数值。...二、为什么会出现float相加精度损失?浮点数在计算机内部是以二进制表示,但是很多十进制小数无法完全用二进制精确表示,因此在进行浮点数加减乘除等运算时,可能会出现一定程度精度损失。...这是由于计算机只能使用有限位数来表示数字,而且在计算过程中会发生舍入误差。如果参与运算两个浮点数小数位数比较多或者差异较大,那么可能会导致精度损失更大。...首先,第一位用于表示符号位(0表示正数,1表示负数),接下来几位表示指数,最后几位表示尾数。具体来说,IEEE 754标准定义了两种浮点数格式:单精度浮点数和精度浮点数。...,结果出现了精度损失,与期望值一定偏差。

    49000

    热点面试题:为什么 0.1+ 0.2 != 0.3,如何让其相等?

    为什么会出现 0.1 + 0.2 != 0.3? • 计算机是通过二进制方式存储数据,所以计算机计算 0.1 + 0.2 时候,实际上是计算两个二进制和。...在二进制科学表示法中,精度浮点数小数部分最多只能保留 52 位,再加上前面的 1,其实就是保留 53 位有效数字,剩余需要舍去,遵从“0 舍 1 入”原则。...• 根据这个原则,0.1 和 0.2 二进制数相加,再转化为十进制数就是:0.30000000000000004。 精度数是如何保存?...由于 JavaScript 数字是精度数,这里就以精度数为例,它指数部分为 11 位,能表示范围就是 0~2047,IEEE 固定精度偏移量为 1023。...具体小数位不为 0 时候表示 NaN;小数位为 0 时,当符号位 s=0 时表示正无穷,s=1 时候表示负无穷。

    12010

    JavaScript之0.1+0.2=0.30000000000000004计算过程

    二进制来存储 number ---- 十进制与 Double 相互转换公式如下: V:表示十进制结果 SEM:表示精度浮点数结果(就是 S 拼 E 拼 M,不是相加) 2^(-4) *...---- 所以用一句话来解释为什么JS精度问题: 简洁版: 因为JS采用Double(精度浮点数)来存储number,Double小数位只有52位,但0.1等小数二进制小数位有无限位,所以当存储...考虑周到版: 因为JS采用Double(精度浮点数)来存储number,Double小数位只有52位,但除最后一位为5十进制小数外,其余小数转为二进制均有无限位,所以当存储52位时,会丢失精度!...,导致了计算结果偏差,我制作了一张流程图帮助大家理解: 显然,JavaScript 是按照「验证方法二」去计算 0.1+0.2 ,我两个疑问: ① 为什么不用误差更小「验证方法一」呢?...这个我暂时不知道,大佬知道的话麻烦给我留言。。 ② 为什么「验证方法二」结果误差比较大?

    1.2K30

    【mysql】定点类型

    DECIMAL(M,D)最大取值范围与DOUBLE类型一样,但是有效数据范围是由M和D决定。DECIMAL 存储空间并不是固定,由精度值M决定,总共占用存储空间为M+2个字节。...也就是说,在一些对精度要求不高场景下,比起占用同样字节长度定点数,浮点数表达数值范围可以更大一些。 定点数在MySQL内部是以字符串形式进行存储,这就决定了它一定是精准。...当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0),表示10个整数位,0个小数位,其范围:-9999999999~9999999999。...当数据精度超出了定点数类型精度范围时,则MySQL同样会进行四舍五入处理。 2....= 1.1 FROM test_double2; [在这里插入图片描述] [在这里插入图片描述] 把test_double2表中字段“f1”数据类型修改为 DECIMAL(5,2) ALTER TABLE

    1.3K40

    MySQL学习笔记:数据类型

    位 double 8个字节 -1.8E308 ~ 1.8E308精度浮点数,精确到小数点后15位除了float和double外,MySQL中还有一种浮点类型 -- DECIMAL(十进制),用于存储精确小数值...DECIMAL类型由两部分组成:精度(precision)和小数位数(scale):精度(precision):表示数值总位数,包括整数部分和小数部分。取值范围为1到65。...这意味着该字段可以存储最大值为99999999.99,最小值为0.01。当向DECIMAL类型字段插入数据时,需要注意以下几点:如果插入数值超出了精度小数位限制,MySQL会报错。...如果插入数值为NULL,则该字段值为NULL。如果插入数值为空字符串(''),则该字段值为0。在查询DECIMAL类型字段时,可以使用四舍五入函数(ROUND())来调整小数位数。...在使用过程中,需要注意精度小数位设置,以确保数据准确性。3.

    27330

    C语言 | 求1!+2!+...+20!

    解题思路:sum不应该定义为int或者long型,假如使用编译器是Visual C++6.0时,int和long型数据在内存都占4个字节,数据范围在 -21亿~21亿。 ...如果将sum定义为double型,以得到更多精度。在输出时,用22.15e格式,使数据宽度为22,数字部分中小数位数为15位。 ...源代码演示: #include//头文件  int main()//主函数  {   double sum=0,temp=1;//精度浮点型变量    int i;//定义整型变量 ...  for(i=1;i<=20;i++)//for循环    {     temp=temp*i;     sum=sum+temp;   }   printf("结果:%22.15e\n",sum);...//输出结果,注意输出格式    return 0;//主函数返回值为0  } 编译运行结果如下: 结果:2.561327494111820e+018 -----------------------

    2.3K88

    mongo常用字段类型

    小数位不变; decimal与double类型相加,小数位会变成14位。...,不是唯一 #以上四种标识符拼凑成世界上唯一ObjectID #只要是支持MongoDB语言,都会有一个或多个方法,对ObjectID进行转换 #可以得到以上四种信息 #注意:这个类型是不可以被...Mongo shell中使用大整数字面量,但默认整数字面量类型却是精度浮点数,导致丢失精度 问题描述: 通过mongo shell插入或更新一个大整数(长度约大于等于16位数字)时,例如: mongos...64位精度浮点数中,实际是由1bit符号位,11bit阶码位,52bit尾数位构成。...11bit余-1023阶码使得精度浮点数提供大约-1.7E308~+1.7E308范围,52bit尾数位大概能表示15~16位数字(部分16位长整数已经超出52bit能表示范围)。

    6.9K30

    MySQL 数据类型

    int(m)里m是表示SELECT查询结果集中显示宽度,无实际意义,不影响实际取值范围 2、浮点型 MySQL数据类型 含义 float(m,d) 单精度浮点型8位精度(4字节)m总个数,d小数位...double(m,d) 精度浮点型16位精度(8字节)m总个数,d小数位 decimal(m,d) 定点数总个数m<38, d小数位 设一个字段定义为float(5,2),如果插入一个数123.45678...③ Unicode编码中,一个英文字符占两个字节,一个中文占两个字节 char 和 varchar 1. char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。...timestamp,其他字段内容修改时候,这个字段时间数据会自动刷新为当前时间,所以这个数据类型字段可以存放这条记录最后被修改时间。...NULL列值会使得索引、索引统计和值比较更加复杂。

    1.8K20

    Mysql 数据类型(整数、浮点数、定点数、字符串)【类型取值范围】

    2:int(m)里m是表示SELECT查询结果集中显示宽度,不知道这个m什么用。int 占10位,存不了手机号(11位)。...浮点型(float、double、decimal) 浮点型在数据库中存放是近似值·商用开发中(decimal必用) MySQL数据类型 含义 float(m,d) 单精度浮点型     8位精度(4字节...)     m总个数,d小数位 double(m,d) 精度浮点型    16位精度(8字节)    m总个数,d小数位 decimal 压缩“严格”定点数 m+2个字节  设一个字段定义为float...定点数 定点类型在数据库中存放是精确值 浮点型在数据库中存放是近似值,而定点类型在数据库中存放是精确值。 decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。...次方-1个字符 longtext 可变长度,最多232次方-1个字符 json JSON文本最大长度取决系统常量:max_allowed_packet。

    1.3K20

    计算机萌新成长历程——初识C语言2

    ——精度浮点数 下面我将分享一下我对这些数据类型理解。...若是打印浮点型或精度浮点型则显示数据为0 这里小数与小数位数无关,一位也好,多位也好结果都是相同 总结一下short/int/long/long long——整型数据类型 1.变量赋值内容只能是整数...,若赋值小数在打印时也只读取整数部分; 2.若将小数赋值给相关变量来打印浮点型或精度浮点型,小数部分也无法被读取。...6位小数,前五位是正常显示,当小数只有六位时,打印结果显示到第六位,当七位及以上小数位时,打印结果第六位显示第七位小数数值,如下图 随后我查阅了相关资料了解到float和double还是很大区别的...打印浮点,打印double数据类型时使用是%lf——打印精度浮点; 3.两者区别可以简单理解为是精度不同,float精度是在小数点后8位为其有效数字,而double精度则是在小数点后16位为有效数字

    13920

    Mysql 数据类型

    int(m)里m是表示SELECT查询结果集中显示宽度,并不影响实际取值范围,没有影响到显示宽度,不知道这个m什么用。...浮点型(float和double) MySQL数据类型 含义 float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位 double(m,d) 精度浮点型 16位精度(8字节) m总个数...,d小数位 设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存是123.457,但总个数还以实际为准,即6位。...定点数 浮点型在数据库中存放是近似值,而定点类型在数据库中存放是精确值。decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。...timestamp,这个字段时间数据会随其他字段修改时候自动刷新,所以这个数据类型字段可以存放这条记录最后被修改时间。

    1.5K20

    oracle number整数,Oracle number类型语法和用法

    精度(precision),或总位数。默认情况下,精度为38位,取值范围是1~38之间。也可以用字符*表示38。 2. 小数位置(scale),或小数点右边位数。...小数位合法值为-48~127,其默认值取决于是否指定了精度。如果没有知道精度小数位数则默认有最大取值区间。如果指定了精度小数位数默认为0(小数点右边一位都没有)。...例如,定义为NUMBER列会存储浮点数(小数),而NUMBER(38)只存储整数数据(没有小数),因为在第二种情况下小数位数默认为0....我们不能使用固有硬件操作将两个NUMBER类型相加,这要在软件中模拟。不过,浮点数没有这种实现。将两个浮点数相加时,Oracle会使用硬件来执行运算。...换而言之,将一些列number列相加,没有将一系列float列相加来得快。因为float列精度低很多,一般是6~12位。

    1.9K30
    领券