031 - 浮点类型(近似值 FLOAT,DOUBLE)

news2024/11/25 12:35:27

-FLOAT,DOUBLE:

        FLOAT和DOUBLE类型代表近似数字数据值。MySQL将四个字节用于单精度值,并将八个字节用于双精度值。

        对于FLOAT,SQL标准允许对FLOAT括号中的关键字后面的位以精度(而不是指数的范围)进行可选规范 ;; 即 。MySQL还支持此可选的精度规范,但是in的精度值 仅用于确定存储大小。从0到23的精度导致4字节单精度 列。从24到53的精度导致8字节的双精度列。 FLOAT(p)FLOAT(p)FLOATDOUBLE

-- 创建表,还有float和double字段:

CREATE TABLE F_02 (i INT, a FLOAT, b DOUBLE);

-- float插入多位数可看到小数位被省略,由此可看到“浮点值是近似值而不是作为精确值存储的”

 insert into f_02 (i,a,b) values (3,100000.001,200000.002);

        MySQL允许使用非标准语法: 或 或。在此, 平均值最多可以存储最多 位数,其中 位数可以在小数点后。例如,定义为的列 在显示时看起来像 。MySQL在存储值时执行四舍五入,因此,如果将其插入 到 列中,则近似结果为 。 FLOAT(M,D)REAL(M,D)DOUBLE PRECISION(M,D)(M,D)MDFLOAT(7,4)-999.9999999.00009FLOAT(7,4)999.0001

-- 创建表,并设置float小数位:

CREATE TABLE F_03 (a FLOAT(5,3));

-- 插入数据,查看四舍五入数据:

INSERT INTO F_03 (a) VALUES (10.01),(10.001),(10.0001),(10.0006);

 

        由于浮点值是近似值而不是作为精确值存储的,因此在比较中尝试将它们视为精确值可能会导致问题。它们还受平台或实现依赖性的约束。有关更多信息,请参见 第B.3.4.8节“浮点值的问题”

        为了获得最大的可移植性,需要存储近似数值数据值的代码应使用FLOAT或 DOUBLE PRECISION不指定精度或位数。

 浮点值的问题:

        浮点数有时会引起混淆,因为它们是近似值而不是作为精确值存储的。SQL语句中编写的浮点值可能与内部表示的值不同。尝试在比较中将浮点值视为精确值可能会导致问题。它们还受平台或实现依赖性的约束。该 FLOAT和 DOUBLE数据类型都受到这些问题。对于DECIMAL 列,MySQL执行的精度为65位十进制数字,这应该可以解决最常见的不准确性问题。

下面的示例用于 DOUBLE演示使用浮点运算完成的计算如何受到浮点误差的影响。

-- 创建表
CREATE TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);

-- 插入数据
INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),
                      (2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),
                      (2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),
                      (4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),
                      (5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),
                      (6, 0.00, 0.00), (6, -51.40, 0.00);

-- 按照序号分组统计a不等于b的数据
SELECT i, SUM(d1) AS a, SUM(d2) AS bFROM t1 GROUP BY i HAVING a <> b;

-- 统计结果

结果是正确的。虽然前五记录看起来他们不应该满足的比较(值 a和b似乎没有不同),他们可以这样做,因为周围的第十小数左右的数字显示之间的差异,这取决于多种因素,如计算机体系结构或编译器版本或优化级别。例如,不同的CPU可能会不同地评估浮点数。

如果将列d1和d2定义为DECIMAL而不是DOUBLE,则SELECT查询结果 将只包含一行,即上一行。

进行浮点数比较的正确方法是,首先确定数字之间差异的可接受公差,然后再与公差值进行比较。例如,如果我们同意,如果浮点数在千分之一(0.0001)的精度内相同,则应将它们视为相同,那么应进行比较以找出大于公差值的差异:

-- ABS()函数是一种数学函数,其作用是返回给定数字的绝对值。
SELECT i, SUM(d1) AS a, SUM(d2) AS b FROM F_01 GROUP BY i HAVING ABS(a - b) > 0.0001;

-- 结果

相反,要获得数字相同的行,测试应在公差值内找到差异:

SELECT i, SUM(d1) AS a, SUM(d2) AS b FROM F_01 GROUP BY i HAVING ABS(a - b) <= 0.0001;

 -- 结果

浮点值取决于平台或实现的依赖性。假设您执行以下语句: 

CREATE TABLE t1(c1 FLOAT(53,0), c2 FLOAT(53,0));
INSERT INTO t1 VALUES('1e+52','-1e+52');
SELECT * FROM t1;

在某些平台上,该SELECT语句返回inf和-inf。在其他对象上,它返回0和 -0。

前述问题的含义是,如果尝试通过在源上使用mysqldump转储表内容并将转储文件重新加载到副本中来创建 副本,则两个主机之间包含浮点列的表可能会有所不同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis实现分页功能及MyBatis的特殊符号---超详细介绍

一&#xff0c;分页的概念 分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。在分页中&#xff0c;数据被分割成一定数量的页&#xff0c;每页显示一部分数据或内容&#xff0c;用户可以通过翻页或跳分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。…

AI 浪潮下,W3AI 如何增强和激励 Web3 玩家研究和决策力?

更加个性化的 AI 服务是怎样的&#xff1f;近年来&#xff0c;不少主打 AI 服务的 Web3 初创项目开始兴起&#xff0c;凭借语音、文字、图像等全方位的用户数据跟踪和使用习惯定义&#xff0c;场景化的 AI Web3 产品开始围绕用户的工作、生活日常提供智能服务。这其中&#xff…

在router中使用pinia、在组件外使用pinia时 报错没有激活pinia

getActivePinia was called with no active Pinia. Did you forget to install pinia? 我想在路由守卫中使用store中部的数据&#xff0c;但是拿不到仓库&#xff0c;提示pinia没激活 解决方案&#xff1a;借鉴vben-admin 在每个模块中都把pinia和当前的仓库绑定一份暴漏出去…

微服务(rpc)

微服务&#xff08;rpc&#xff09; 微服务必备的模块生产者消费者管理平台流量控制集群情况下如何做到流量监控 负载均衡服务发现和治理序列化传输序列化和反序列化 微服务是一种架构风格&#xff0c;将一个应用程序拆分为一组小型、独立的服务&#xff0c;每个服务都可以独立…

Linux: 使用scp命令复制文件夹报 not a regular file 错误解决

使用scp 命令复制文件夹报 not a regular file 错误解决 解决办法&#xff1a; 加入参数 -r&#xff1a; 递归复制整个目录 scp命令参数详解

【MyBatis】:PageHelper分页插件与特殊字符处理

目录 一、PageHelper介绍 二、PageHelper使用 1. 导入pom依赖 2. Mybatis.cfg.xml 配置拦截器 3. 配置 Mapper.xml 4. 编写测试 三、特殊字符处理 1. 使用转义字符 2. 使用CDATA 区段 一、PageHelper介绍 PageHelper 是 Mybatis 的一个插件&#xff0c;这里就不扯了&a…

Unity——DOTween插件使用方法简介

缓动动画既是一种编程技术&#xff0c;也是一种动画的设计思路。从设计角度来看&#xff0c;可以有以下描述 事先设计很多基本的动画样式&#xff0c;如移动、缩放、旋转、变色和弹跳等。但这些动画都以抽象方式表示&#xff0c;一般封装为程序函数动画的参数可以在使用时指定&…

JUC初识

JUC 是什么 java.util.concurrent 在并发编程中使用的工具包 从线程start 开始 package com.jhj.Thread;public class ThreadDemo {public static void main(String[] args) {Thread t1 new Thread(() -> {}, "t1");t1.start();} }start 方法调的是native sta…

java:Tomcat

文章目录 背景服务器web 服务器服务资源的分类服务器软件的分类nginx 和 tomact总结 安装Tomcatbrew安装官网压缩包安装IDEA集成IDEA插件 说明 背景 在讲 Tomcat 是啥之前&#xff0c;我们先来了解一些概念。 服务器 可以理解为一个高性能的电脑&#xff0c;但是这个电脑现在…

Qt6和Rust结合构建桌面应用

桌面应用程序是原生的、快速的、安全的&#xff0c;并提供Web应用程序无法比拟的体验。 Rust 是一种低级静态类型多范式编程语言&#xff0c;专注于安全性和性能&#xff0c;解决了 C/C 长期以来一直在努力解决的问题&#xff0c;例如内存错误和构建并发程序。 在桌面应用程序开…

如何给开源仓库提交pull request?

Pull Request&#xff08;PR&#xff09;是一种在基于版本控制系统的协作开发中使用的功能&#xff0c;它允许开发人员将自己所做的代码更改&#xff08;commits&#xff09;提交给项目的主要代码库。具体而言&#xff0c;当在分支中做出代码更新后&#xff0c;开发人员可以发起…

射频有源器件的动态范围和交越失真

射频有源器件的动态范围和交越失真 1、增益压缩 一个输入信号Vin经过一个非线性网络后输出为Vout&#xff0c;Vout与Vin用泰勒级数的关系表示&#xff1a; Vout a0 a1*Vin a2*Vin^2 a3*Vin^3 …… a0为直流输出&#xff0c;a1为线性输出&#xff0c;a2为平方输出&…

Android 基础知识

一、Activity 1、onSaveInstanceState(),onRestoreInstanceState的调用时机 onSaveInstanceState 调用时机 从最近应用中选择运行其他程序时 但用户按下Home键时 屏幕方向切换时 按下电源案件时 从当前activity启动一个新的activity时 onRestorInstanceState调用时机 只…

windows下安装go环境 和vscode中go扩展

1. 首先安装GO Go下载地址&#xff1a;go.dev 选择相对应的版本&#xff0c;下载&#xff0c;运行安装程序&#xff0c;并打开命令提示符&#xff0c;运行 go env &#xff0c;确认已经安装go 注意关注其中GOPATH和GOROOT&#xff0c;这两个地址可以在系统环境变量中进行设置…

在其他python环境中使用jupyter notebook

1、切换到目标python环境 activate 目标python环境 2、安装notebook内核包 pip install ipykernel 3、加环境加入到notebook中 python -m ipykernel install 目标python环境 4、切换到base环境 activate base 5、打开目标项目的对应盘 如果&#xff0c;项目在c盘&…

docker-maven-plugin直接把镜像推到私有仓库

接着上篇 推送到本地docker 我们已经把服务做成镜像推到docker&#xff0c;也可以通过docker login 私有地址&#xff0c;去push。麻烦 直接上代码 1、pom改动 <properties><docker.registry>eco-registry.XXX.com</docker.repostory><docker.registry…

云从科技“AI困局”:上半年营收腰斩、亏损超3亿

“AI四小龙”云从科技难“从容”&#xff1f; 8月12日&#xff0c;云从科技集团股份有限公司(下称“云从科技”,688327.SH)公布了2023半年报。上半年云从科技推出“从容”大模型&#xff0c;但此后其迎来大规模解禁。 5月29日&#xff0c;云从科技宣布将4.55亿股股份解除限售…

如何选择合适的供应商管理系统?

供应商管理系统可以对企业的业务及其日常运营产生深远影响。该解决方案可集中管理采购、预算编制、供应商选择、交付跟踪、发票开具和报告。管理这些流程既费时又费钱&#xff0c;这也解释了为什么一半以上的企业目前都将数字化转型作为重中之重。 但是&#xff0c;如何选择合…

MediaPlayer音频与视频的播放介绍

作者&#xff1a;向阳逐梦 Android多媒体中的——MediaPlayer&#xff0c;我们可以通过这个API来播放音频和视频该类是Androd多媒体框架中的一个重要组件&#xff0c;通过该类&#xff0c;我们可以以最小的步骤来获取&#xff0c;解码和播放音视频。 它支持三种不同的媒体来源…

Binder通信的核心思想

Binder到底是什么&#xff1f;Binder通信到底是怎么实现的&#xff1f;脱离复杂的Android Framework代码&#xff0c;用最简单的方式来理解下什么是Binder通信。 关于IPC通信 在Linux系统中&#xff0c;正常运行的两个进程A和B&#xff0c;它们之间如果要进行数据的通信&#x…