【送书活动二期】Java和MySQL数据库中关于小数的保存问题

之前总结过一篇文章mysql数据库:decimal类型与decimal长度用法详解,主要是个人学习期间遇到的mysql中关于decimal字段的详解,最近在群里遇到一个小伙伴提出的问题,也有部分涉及,今天就再大致总结一下Java和MySQL数据库中关于小数的保存问题

目录

  • Java 中的小数类型
    • float
    • double
    • BigDecimal
  • MySQL 中的小数类型
    • 1. FLOAT
    • 2. DOUBLE
    • 3.Float
  • 对比分析
    • 1. 精度要求
    • 2. 存储空间
    • 3. 舍入误差
  • 书籍推荐
    • 书籍名称:《Java图解创意编程:从菜鸟到互联网大厂之路》
    • 内容介绍
    • 适合人群
    • 如何领书

Java 中的小数类型

在Java中,小数的表示主要依赖于两个基本数据类型:float和double。这两种类型都是浮点类型,但它们在精度和存储空间上有所不同。

float

单精度浮点数,字节数为 4,占用32位,整数部分最多 7 位,小数部分最多 7 位,取值范围太小,几乎没有用,但通常用于节省内存空间。

double

双精度浮点数,字节数为 8,占用64位,整数部分最多 15 位,小数部分最多 15 位,基本够用,计算金钱可以达到1 亿亿以内的范围;提供更高的精度,但占用更多的内存空间。

BigDecimal

比较大的小数只能使用 BigDecimal 来接收,MySQL 数据库 decimal 可以保存最多 65 位的小数,但是 double只能接收差不多 15 位的小数。

数据库获取到数据需要转换成字符串类型,然后再使用 BigDecimal(String) 构造器将数值封装成一个 BigDecimal 对象。

在实际开发中,选择合适的类型要根据精度和内存占用的平衡,以满足业务需求。


MySQL 中的小数类型

MySQL中提供了多种小数类型,主要包括FLOAT、DOUBLE、DECIMAL。每种类型都有其独特的特点。

1. FLOAT

单精度浮点数,适用于需要较大范围的数值,但对精度要求不高的情况。
用于表示近似数值数据类型。SQL 标准允许在关键字 float 后面的括号内选择用位指定精度(但不能为指数范围)。0 到 23 的精度对应 float 列的 4 字节单精度。

myfloat FLOAT(8,4);

例如上面,定义为 float(8,4) 的一个列可以显示为 -9999.9999。MySQL 保存值时进行四舍五入,因此如果在 float(8,4) 列内插入 9990.00009,近似结果是 9990.0001。

⚠️:float 数据在运算时,如果数字溢出不会报错,会有精度的损失。

2. DOUBLE

双精度浮点数,提供更高的精度,适用于对数值精度要求较高的场景。
可以设置保留的小数个数。decimal(m,d),表示该值一共显示 m 位整数,其中 d 位位于小数点后面。

decimal 和 numeric 类型在 MySQL 中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度。
例如:

salary decimal(5,2)

在该例子中,5 是精度,2 是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。

在标准SQL中,语法 decimal(m) 等价于 decimal(m,0)。同样,语法 decimal 等价于vdecimal(m,0),可以通过计算确定 m 的值。在MySQL 5.1中支持 decimal 和 numeric 数据类型的变量形式。m 默认值是 10。

decimal 或 numeric 的最大位数是 65,但具体的 decimal 或 numeric
列的实际范围受具体列的精度或标度约束。如果此类列分配的值小数点后面的位数超过指定的标度允许的范围,值被转换为该标度。(具体操作与操作系统有关,但一般结果均被截取到允许的位数)。

注:当对 decimal 类型的数据进行运算操作时,如果数值溢出会报错。

3.Float

单精度浮点数,适用于需要较大范围的数值,但对精度要求不高的情况。用于表示近似数值数据类型。
SQL 标准允许在关键字 float后面的括号内选择用位指定精度(但不能为指数范围)。0 到 23 的精度对应 float 列的 4 字节单精度。

例如,定义为 float(7,4) 的一个列可以显示为 -999.9999。MySQL 保存值时进行四舍五入,因此如果在 float(7,4) 列内插入 999.00009,近似结果是 999.0001。

注:float 数据在运算时,如果数字溢出不会报错,会有精度的损失。


对比分析

1. 精度要求

  • 如果业务对小数的精度要求较低,且对内存占用有要求,可以选择使用float。
  • 如果需要更高的精度,但仍然可以容忍一定的舍入误差,可以选择使用double。
  • 如果业务对小数的精度要求非常高,且不能容忍任何误差,应该选择DECIMAL。

2. 存储空间

  • float占用4字节,适用于存储较大范围的数值。
  • double占用8字节,提供更高的精度,但占用更多的存储空间。
  • DECIMAL的存储空间与精度有关,但通常比double更节省存储空间。

3. 舍入误差

  • 浮点数(float和double)在进行计算时可能存在舍入误差,因为它们是基于二进制表示的,而十进制小数无法精确表示为二进制小数。
  • DECIMAL类型是基于十进制的,不会出现浮点数的舍入误差,适用于对精度要求极高的场景。

书籍推荐

这是一本兼具趣味性、实用性、广泛性的好书,简直是编程小白的福音!
一、深入浅出,用可视化项目让读者体验动手创造世界的编程成就感。
二、理论和工程相结合,在动手的同时夯实基础,让读者更直观地理解数据结构、算法、网络等计算机底层原理。
三、通过代码级别的讲解,让初学者有机会在自学过程中丰富自己的实战经验,接触到业界流行的技术框架,为未来实习和进入职场打下坚实基础。

书籍名称:《Java图解创意编程:从菜鸟到互联网大厂之路》

在这里插入图片描述

内容介绍

本书从问题入手,使用100多个创意编程范例,试图在深入理解原理的基础上,通过自造“轮子”帮助读者提升代码编写功底和工程实现能力。全书分为12章,内容包括Java入门、分形图像处理、数据结构、网络通信、动态装载、多线程、Raft协议、分布式编程和ZooKeeper框架等,由浅入深实现“美颜相机”“迷你通信会议”“迷你Web服务器”“迷你Raft”等项目。本书针对每一个范例,首先给出代码实现和重要知识点,然后提出任务以使读者发挥创意,提升代码编写技能。

适合人群

本书由浅入深,有趣有料,适合想提升代码编写水平的大学生、求职者、编程爱好者阅读,也适合有1~2年开发经验的程序员参考,还可以作为各类培训班的培训教材

如何领书

————————————————
本次本篇文章送书 🔥2-3本 评论区抽2-3位小伙伴送书
📆 活动时间:截止到 2023-12-06 20:00:00
🎁抽奖方式:利用网络公开的在线抽奖工具进行抽奖
💡参与方式:关注、点赞、收藏,评论 “人生苦短,我要去大厂搬砖”
根据文章阅读量的多少来安排送书的本数。
————————————————

🔥 注:活动结束后,会私信中奖粉丝的,各位注意查看私信哦!

小伙伴也可以访问链接进行自主购买哦~
直达京东购买链接:《Java图解创意编程:从菜鸟到互联网大厂之路》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

热门话题解析:pytest测试用例顺序问题解决方案!

前言 上一篇文章我们讲了在pytest中测试用例的命名规则,那么在pytest中又是以怎样的顺序执行测试用例的呢? 在unittest框架中,默认按照ACSII码的顺序加载测试用例并执行,顺序为:09、AZ、a~z,测试目录、测…

【软件测试学习】—软件测试的概念与软件测试模型(一)

【软件测试学习】—软件测试的概念与软件测试模型(一) 我 | 在这里 👩‍🦰👩‍🦰 读书 | 长沙 ⭐计算机科学与技术 ⭐ 本科 【2024届】 🎃🎃 爱好 | 旅游、跑步、网易云、美食、摄影…

力扣 41 42.接雨水问题详细讲解,保证看完必会接雨水问题!!!时间复杂度最优解 o(n)

首先来个开胃小菜,41.缺少最小整数(难度:困难)真实感觉像是个简单级别 41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额…

制作心理咨询小程序的详细指南

随着科技的的发展,小程序已经成为了人们日常生活中不可或缺的一部分。特别是在心理咨询这个领域,小程序可以提供一个更为便捷、高效的服务平台。本文将通过乔拓云平台为例,详细介绍如何制作一个心理咨询小程序。 首先,我们需要注册…

销门!销售秘籍都在这了

很多刚进销售行业,或者初入职场的小白,肯定会有这一段迷茫/茫然期:为什么同事每天都有客户打电话/实地拜访呢? 而自己却无所事事,也没有客户找我,也不知道去哪里拜访客户。 这个阶段对于销售小白来说是很…

YOLOv5原创改进:全维动态卷积再改进,GCODConv

目录 一、原理 网络结构 二、代码 三、应用到YOLOv5中 一、原理

Mysql解决随机选取问题

常规的随机选取效率差的原因: 两种解决方法: 总结:

【Redis基础】Redis基本的全局命令

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! Redis基本的全局命令 1,KEYS命令 语法:KEYS pattern KEYS命令用来查询服…

深度学习知识点

深度学习过程 data [] for i,d in enumerate(data):image,label d image,label image.cuda(),label.cuda()img net(image)optimizer.zero_grad()#需要将梯度信息清零,因为梯度计算是按照batch分批次计算的,如果这一批batch没清零,会影响…

深入理解堆排序:建堆、排序与优化

引言 在计算机科学中,堆排序是一种高效的排序算法,利用堆的数据结构特性进行排序。本文将深入探讨堆排序的原理、实现过程,并介绍一种优化方法,以帮助读者更好地理解和运用这一经典算法 目录 堆排序简介 1.1 什么是堆排序&#x…

Vue生命周期

生命周期 Vue.js 组件生命周期: 生命周期函数(钩子)就是给我们提供了一些特定的时刻,让我们可以在这个周期段内加入自己的代码,做一些需要的事情; 生命周期钩子中的this指向是VM 或 组件实例对象 在JS 中,…

JRT实现缓存协议

上一篇介绍的借助ORM的增、删、改和DolerGet方法,ORM可以很精准的知道热点数据做内存缓存。那么就有一个问题存在,即部署了多个站点时候,如果用户在一个Web里修改数据了,那么其他Web的ORM是不知道这个变化的,其他Web还…

局部性原理和伪共享

CPU Cache CPU Cache可以理解为CPU内部的高速缓存。CPU从内存读取数据时,将要读取的数据及其相邻地址的数据,即至少一个Cache Line,写入Cache,以便后续访问时提高读取速度。 CPU存在多级Cache,级别最高的离CPU最近&a…

实现电商平台与营销系统无缝集成:雅座的无代码开发与API连接

无代码开发:营销的新引擎 在数字化转型的浪潮中,无代码开发已成为企业提升效率、减少成本的新引擎。这种开发方式允许非技术人员通过图形界面构建应用程序,无需编写代码即可实现复杂功能。这对于营销、广告推广以及用户运营等业务尤为重要&a…

贪心 53. 最大子序和 122.买卖股票的最佳时机 II

53. 最大子序和 题目: 给定一个数组,有正有负,找出一个连续子序列的总和最大(子数组最少一个) 暴力思路: 双层for循环,记录每一次可能的子序列的总和,初始为整数最小值&#xff…

Go语言实现大模型分词器tokenizer

文章目录 前言核心结构体定义构造函数文本初始处理组词构建词组索引训练数据编码解码打印状态信息运行效果总结 前言 大模型的tokenizer用于将原始文本输入转化为模型可处理的输入形式。tokenizer将文本分割成单词、子词或字符,并将其编码为数字表示。大模型的toke…

ArkTS-取消标题与自定义标题栏

文章目录 取消标头自定义标题栏导入Resources自定义跳转动画关于底部tabBar导航文本输入(TextInput/TextArea)自定义样式添加事件可以是onChange可以是onSubmit List列表组件设置主轴方向 网格布局服务卡片-获取地理位置页面获取地理位置服务卡片获取地理位置 可以先看看&#…

wvp 视频监控平台抓包分析

抓包时机 下面的抓包时机是抓包文件最新,但是最有用的包 选择网卡开始抓包 如果之前已经选择网卡,直接开始抓包 停止抓包 重新抓包 sip播放过程分析 过滤条件 tcp.port 5060 and sip 可以看到有这些包 选择任何一个 ,戍边右键--追踪流--…

【批处理常用命令及用法大全】

文章目录 1 echo 和 回显控制命令2 errorlevel程序返回码3 dir显示目录中的文件和子目录列表4 cd更改当前目录5 md创建目录6 rd删除目录7 del删除文件8 ren文件重命名9 cls清屏10 type显示文件内容11 copy拷贝文件12 title设置cmd窗口的标题13 ver显示系统版本14 label 和 vol设…

加密挖矿、AI发展刺激算力需求激增!去中心化算力时代已来临!

2009年1月3日,中本聪在芬兰赫尔辛基的一个小型服务器上挖出了比特币的创世区块,并获得了50BTC的出块奖励。自加密货币诞生第一天起,算力一直在行业扮演非常重要的角色。行业对算力的真实需求,也极大推动了芯片厂商的发展&#xff…