numeric是啥类型?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numeric是啥类型?相关的知识,希望对你有一定的参考价值。
NUMERIC数据类型是一种精确数字数据类型,其精度在算术运算后保留到最小有效位,numeric是标准sql的数据类型,格式是numeric(m,n)。
numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数,也就是说这个字段的整数位最大是3位。
NUMERIC的注意事项:
如果创建NUMERIC数据类型的列或变量,而且其精度或小数位数超过为数据库设置的精度和小数位数,则会按照数据库设置截断这些值。因此,如果发现在定义为NUMERIC的列或变量中的值被截断,需检查精度和小数位数使其不超过数据库选项设置。
numeric 和 decimal 数据类型的默认最大精度值是38,在 Transact-SQL 中,numeric 与 decimal 数据类型在功能上等效。当数据值一定要按照指定精确存储时,可以用带有小数的 decimal 数据类型来存储数字。
以上内容参考:
百度百科-NUMERIC
一、numeric跟decimal同义
1、用于精确存储数值;
2、decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边;
3、decimal 数据类型存储了一个准确(精确)的数字表达法,不存储值的近似值。
二、定义 decimal 的列、变量和参数的两种特性如下
1、p 小数点左边和右边数字之和,不包括小数点。如 123.45,则 p=5,s=2, 指定精度或对象能够控制的数字个数;
2、s 指定可放到小数点右边的小数位数或数字个数;
3、p 和 s 必须遵守以下规则:0 <= s <= p <= 38;
4、numeric 和 decimal 数据类型的默认最大精度值是 38,在 Transact-SQL 中,numeric 与 decimal 数据类型在功能上等效;
5、当数据值一定要按照指定精确存储时,可以用带有小数的 decimal 数据类型来存储数字。
三、转换 decimal 和 numeric 数据
1、对于 decimal 和 numeric 数据类型,Microsoft® SQL Server™ 将精度和小数位数的每个特定组合看作是不同的数据类型。比如,decimal(5,5) 和 decimal(5,0) 被当作不同的数据类型;
2、在 Transact-SQL 语句中,带有小数点的常量自动转换为 numeric 数据值,且必然使用最小的精度和小数位数。比如,常量 12.345 被转换为 numeric 值,其精度为 5,小数位为 3;
3、从 decimal 或 numeric 向 float 或 real 转换会导致精度损失。从 int、smallint、tinyint、float、real、money 或 smallmoney 向 decimal 或 numeric 转换会导致溢出;
4、默认情况下,在将数字转换为较低精度和小数位数的 decimal 或 numeric 值时,SQL Server 使用舍入法。然而,如果 SET ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误;
5、若仅损失精度和小数位数,则不会产生错误。
Python数据类型之“数字(numerics)”
上一节内容说的是“Python基本语法”,本节主要讲下Python中的数据类型。
存储在内存中的数据通常有两个属性:
- 在内存中的存放位置:这个存放位置通过变量名可以找到;
- 在内存中的存放方式:这个由数据类型决定,如占几个字节的空间、占用空间是否需要连续等。
Python中有很多内置类型(built-in types),内置类型可以理解为构建在Python Interpreter(Python解释器)里面的类型。Python中主要的内置类型有以下几种:
- numerics(数字):int、float、complex、bool
- sequences(序列/有序集合): str、list、tuple、range
- sets(无序集合):set
- mappings(映射):dict
- classes(类)
- instance(实例)
- exceptions(异常)
我们主要说下numberics、sequences、sets 和 mappings这四种内置数据类型。为了避免篇幅过长,我们将对它们分别进行说明。
数字类型(numerics)
Python3 中的数字支持int(整型)、float(浮点型)、complex(复数)。Python文档中bool(布尔值)不属于数字类型,但是这里也把bool类型放在这里来说,因为bool是int的子类。就像大多是语言一样,Python中的数据类型也是很直观的。我们通过Python内置的type()函数可以查看变量所致的对象类型:
a = 10 # 整型
b = 1.5 # 浮点型
c = True # 布尔型
d = 5+2j # 复数
# 也可以同时给多个变量赋值
# a, b, c, d = 10, 1.5, True, 5+2j
print(type(a), type(b), type(c), type(d))
输出结果:
<class \'int\'> <class \'float\'> <class \'bool\'> <class \'complex\'>
说明
Python2 中的数字类型还包括一个long(长整型),且会自动将超过整型长度的数字转换为长整型(数字最后加上L字母表示长整形)。但是Python3中已经没有long类型了,int和long都叫整型(int)。
bool(布尔型)之所以属于数字类型,是因为bool是int的子类。
1. 强制类型转换
顾名思义,强制类型转换就是把一个数据类型强制转换为另一数据类型。这里,我们先说下数字类型(int、float、bool、complex)间的相互转换。
int与bool类型
在Python解释器的交互式终端通过help(bool)可以查看bool类的完整定义,会发现bool是int类型的子类。另外bool类型只有两个值:True和False,因此bool与int类型的值必然存在某种关联。
>>> int(True)
1
>>> int(False)
0
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(0)
False
结论:
- bool 转 int时, Ture->1, False->0
- int 转 bool时, 非0->True, 0->False
int、bool与float类型
bool类型可以看作一个特殊的int类型
>>> float(5)
5.0
>>> float(True)
1.0
>>> float(False)
0.0
>>> int(5.0)
5
>>> bool(5.0)
True
>>> bool(0.0)
False
int、bool、float与complex
>>> complex(5)
(5+0j)
>>> complex(5.0)
(5+0j)
>>> complex(True)
(1+0j)
>>> complex(False)
0j
>>> bool((5+0j))
True
>>> bool((0+0j))
False
>>> int((5+0j))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can\'t convert complex to int
>>> float((5+0j))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can\'t convert complex to float
结论:complex类型 不能强制转换为 int 和 float类型
2. 自动类型转换
自动类型转换是指两个不同类型的操作数参与运算时,Python会先按照以下规则先对其中一个操作数进行自动类型转换,然后再进行运算。
- 如果有一个操作数是复数,另一个操作数会被转换为复数
- 否则,如果有一个操作数是浮点型,另一个操作数会被转换为浮点型
- (Python 2)否则,如果有一个操作数是长整形,另一个操作数会被转换为长整型
- 否则,如果有一个是整型,另一个是布尔型,则布尔型会被转换为整型0或1
- 否则,两个都是相同数据类型,无需类型转换
>>> 2 + (5+2j) # 整型转复数
(7+2j)
>>> 2.0 + (5+2j) # 浮点型转复数
(7+2j)
>>> True + (5+2j) # 布尔型转复数
(6+2j)
>>> 2 + 5.0 # 整型转浮点型
7.0
>>> True + 5.0 # 布尔型转浮点型
6.0
>>> True + 2 # 布尔型转整型
3
以上是关于numeric是啥类型?的主要内容,如果未能解决你的问题,请参考以下文章
numeric 在Java中怎么定义,是啥类型的呢? float?还是double?还是long呢?
在C语言编程的时候 人民币用的是那种字符类型?(numeric)这个 是啥意思?
在调用 std::numeric_limits<unsigned char> 成员之前,一元“+”的目的是啥?