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

参考技术A

一、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数据类型之“数字(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> 成员之前,一元“+”的目的是啥?

SQL数据库中Numeric(10,2)是啥意思?

将 numeric 转换为数据类型 numeric 时出现算术溢出错误

速达 将numeric转换为数据类型numeric时发生算术溢出错误