decimal与 float的区别

摘要:
decimal数据类型最多可存储38个数字,所有数字都能够放到小数点的右边。float和real数据float和real数据类型被称为近似的数据类型。转换decimal和numeric数据对于decimal和numeric数据类型,MicrosoftSQLServer将精度和小数位数的每个特定组合看作是不同的数据类型。在Transact-SQL语句中,带有小数点的常量自动转换为numeric数据值,且必然使用最小的精度和小数位数。从decimal或numeric向float或real转换会导致精度损失。默认情况下,在将数字转换为较低精度和小数位数的decimal或numeric值时,SQLServer使用舍入法。
decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。decimal 数据类型存储了一个准确(精确)的数字表达法;不存储值的近似值。
定义 decimal 的列、变量和参数的两种特性如下:
· p 小数点左边和右边数字之和,不包括小数点。如 123.45,则 p=5,s=2。
指定精度或对象能够控制的数字个数。
· s
指定可放到小数点右边的小数位数或数字个数。
p 和 s 必须遵守以下规则:0 <= s <= p <= 38。
numericdecimal 数据类型的默认最大精度值是 38。在 Transact-SQL 中,numeric decimal 数据类型在功能上等效。
当数据值一定要按照指定精确存储时,可以用带有小数的 decimal 数据类型来存储数字。
float real 数据
float real 数据类型被称为近似的数据类型。在近似数字数据类型方面,floatreal 数据的使用遵循 IEEE 754 标准。
近似数字数据类型并不存储为多数数字指定的精确值,它们只储存这些值的最近似值。在很多应用程序中,指定值与存储值之间的微小差异并不明显。但有时这些差异也值得引起注意。由于 floatreal 数据类型的这种近似性,当要求精确的数字状态时,比如在财务应用程序中,在那些需要舍入的操作中,或在等值核对的操作中,就不使用这些数据类型。这时就要用integerdecimalmoneysmallmone数据类型。
在 WHERE 子句搜索条件中(特别是 = 和 <> 运算符),应避免使用 floatreal 列。最好限制使用 floatreal 列做> 或 < 的比较。
IEEE 754 规格提供了四种舍入模式:舍入到最接近的值、上舍入、下舍入和舍入到零。Microsoft® SQL Server™ 使用上舍入。所有的数值必须精确到确定的精度,但会产生细小的浮点值变化。因为浮点数字的二进制表示法可以采用很多合法舍入规则中的任意一条,因此我们不可能可靠地量化一个浮点值。
转换decimal numeric 数据
对于 decimal numeric 数据类型,Microsoft® SQL Server™ 将精度和小数位数的每个特定组合看作是不同的数据类型。例如,decimal(5,5) 和 decimal(5,0) 被当作不同的数据类型。(因此在编存储过程当中使用的变量采用Real 或 Float,而不采用decimal类型)
在 Transact-SQL 语句中,带有小数点的常量自动转换为 numeric 数据值,且必然使用最小的精度和小数位数。例如,常量 12.345 被转换为 numeric 值,其精度为 5,小数位为 3。
decimal numeric floatreal 转换会导致精度损失。从 intsmallinttinyintfloatrealmoney smallmoneydecimalnumeric 转换会导致溢出。
默认情况下,在将数字转换为较低精度和小数位数的 decimalnumeric 值时,SQL Server 使用舍入法。然而,如果 SET ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误。若仅损失精度和小数位数,则不会产生错误。
Float 的科学计数法与值的问题,问题的根源在于 float 类型本身是一种不精确的数据表示方法, 也就是说, 你放一个数据进去, 拿出来的时候可能会存在一点点点误差, 而这点点点误差在做数据比较的时候就会导致数据不一致.

免责声明:文章转载自《decimal与 float的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python-进程与线程项目中一次排序规则的改动,注意到js中map的遍历的顺序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

sqlserver 计算 百分比

select ltrim(Convert(numeric(9,2),25*100.0/30))+'%' As 百分比 NUMERIC(P,S) P的默认值是:38 S的默认值是:-84~127 numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数,也就是说这...

Python小白学习之路(九)—【字符串格式化】【百分号方式】【format方式】

写在前面: 最近的事情好像有很多。李咏的离去,让我觉得很突然,仿佛印象中就是主持节目的他,看着他和哈文的爱情,很是感动。离去,没有什么抱怨,只是遗憾。 总会感慨,时光的流逝。 好像真的很快,转眼间,我都这么大了。 最近,刘某人总说的一句话,小时候虽然很穷,但是很快乐 而现在,不仅仅是穷,而且还不快乐 想想还真是(手动捂脸) 最近身体不舒服,好像学习也停滞不...

数据库_12_数据类型(列类型)

所谓的数据类型:对数据进行统一的分类,从系统的角度出发为了能够使用统一的方式进行管理,更好的利用有限的空间。 SQL中将数据类型分成了三大类:数值类型,字符串类型和时间日期类型。 1、数值型 数值型数据:都是数值。系统将数值型分为整数型和小数型 1.1整数型 存放整型数据,在SQL中因为更多要考虑如何节省磁盘空间,所以系统将整型又细分成了5类: Tiny...

五:SQL语句中的数据类型

一:MySQL数据类型   MySQL中定义数据字段的类型对你数据库的优化是非常重要的   MySQL支持多种数据类型,大致可以分为三类:数值 日期/时间和字符串 二、数值类型(12)   2.1、整数类型(6)     一张图就能解释清楚了:              INTEGER同INT。    2.2、定点数(2)            DECIM...

第二百一十三节,jQuery EasyUI,NumberBox(数值输入框)组件

jQuery EasyUI,NumberBox(数值输入框)组件 功能:只能输入数值,和各种数值的计算 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 NumberBox(数值输入框)组件的使用方法,这个组件依赖 于 ValidateBox(验证框)组件。 一.加载方式 class 加载方式...

input框输入金额处理的解决办法

最近已经上线的项目突然出现了input输入金额删除时出现问题,网上各种搜索都没有搜到想要的,今天就以react框架为例子进行代码奉献,我会把需求及解决方法写出来,希望对朋友们有用。 如有更好地实现方式欢迎指点! 一、需求 1、只允许输入数字 2、只允许输入一个小数点,且小数点只能有一个,后面最多可输两位小数 3、金额转成大写 4、控制金额输入的位数 二、实...