當前位置:首頁 » 編程語言 » sql雙精度怎麼表示
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql雙精度怎麼表示

發布時間: 2022-07-25 11:18:29

sql中數據類型float與real的區別

一、意思不同

FLOAT浮點型數據類型,FLOAT 數據類型用於存儲單精度浮點數或雙精度浮點數。浮點數使用IEEE(電氣和電子工程師協會)格式。real是不精確的雙精度浮點型,float 和 real 數據類型被稱為近似的數據類型。

二、位元組不同

real型數據的存儲大小為4個位元組,可精確到小數點後第7位數字。這種數據類型的數據存儲范圍為從-3.40E+38~-1.18E-38,0和1.18E-38~3.40E+38。

float型的數據存儲大小為8個位元組,可精確到小數點後第15位數字。這種數據類型的數據存儲范圍為從-1.79E+308~-2.23E-308,0和2.23E+308~1.79E+308。 FLOAT(size,d) 帶有浮動小數點的小數字。在括弧中規定最大位數。在 d 參數中規定小數點右側的最大位數。

二、寫法

float型的數據可寫成float[(n)]的形式。其中n是1~15之間的整數值,指定float型數據的精度。當n為1~7時,實際上用戶定義了一個real型的數據,系統用4個位元組存儲;當n為8~15時,系統認為它是個float型的數據,用8個位元組存儲它。這樣既增強了數據定義的靈活性,又節省了空間。

float 和 real 的使用遵循有關近似數值數據類型的 IEEE 754 規范。

② sql server2005中數據類型的Numeric(18,0) 是什麼意思

sql server2005中數據類型百的Numeric(18,0)意思是總的位數為18位數字,小數點後的位數為0位。

NUMERIC數據類型使用標准、可變長度的內部格式來存儲數字。

Microsoft Jet資料庫引擎SQL 數據類型 由13個基本數據類型組成,它們是由 Microsoft Jet 資料庫引擎和幾個驗證過的有效同義字定義的。常見的有:整形,單精度,雙精度,可變長度字元,固定長度字元,長型,日期等等。

(2)sql雙精度怎麼表示擴展閱讀:

創建用戶定義的數據類型可以使用Transact-SQL語句。系統存儲過程sp_addtype 可以來創建用戶定義的數據類型。其語法形式如下:

sp_addtype {type},[,system_data_bype][,'null_type']

其中,type 是用戶定義的數據類型的名稱。system_data_type 是系統提供的數據類型,例如 Decimal、Int、Char 等等。

null_type 表示該數據類型是如何處理空值的,必須使用單引號引起來,例如'NULL'、'NOT NULL'或者'NONULL'。

③ sql語言中,各種數據類型代表的含義是什麼

(1)數值型

數值是諸如32 或153.4 這樣的值。MySQL 支持科學表示法,科學表示法由整數或浮點數後跟「e」或「E」、一個符號(「+」或「-」)和一個整數指數來表示。1.24E+12 和23.47e-1 都是合法的科學表示法表示的數。而1.24E12 不是合法的,因為指數前的符號未給出。

浮點數由整數部分、一個小數點和小數部分組成。整數部分和小數部分可以分別為空,但不能同時為空。

數值前可放一個負號「-」以表示負值。

(2)字元(串)型

字元型(也叫字元串型,簡稱串)是諸如「Hello, world!」或「一個饅頭引起的血案」這樣的值,或者是電話號碼87398413這樣的值。既可用單引號也可用雙引號將串值括起來。

初學者往往分不清數值87398143和字元串87398143的區別。都是數字啊,怎麼一個要用數值型,一個要用字元型呢?關鍵就在於:數值型的87398143是要參與計算的,比如它是金融中的一個貨款總額;而字元型的87398143是不參與計算的,只是表示電話號碼,這樣的還有街道號碼、門牌號碼等等,它們都不參與計算。

(3)日期和時間型

日期和時間是一些諸如「2006-07-12」或「12:30:43」這樣的值。MySQL還支持日期/時間的組合,如「2006-07-12 12:30:43」。

(4)NULL值

NULL表示未知值。比如填寫表格中通訊地址不清楚留空不填寫,這就是NULL值。

我們用Create Table語句創建一個表,這個表中包含列的定義。例如我們在前面創建了一個joke表,這個表中有content和writer兩個列:

定義一個列的語法如下:

其中列名由col_name 給出。列名可最多包含64個字元,字元包括字母、數字、下劃線及美元符號。列名可以名字中合法的任何符號(包括數字)開頭。但列名不能完全由數字組成,因為那樣可能使其與數據分不開。MySQL保留諸如SELECT、DELETE和CREATE這樣的詞,這些詞不能用做列名,但是函數名(如POS 和MIN)是可以使用的。

列類型col_type表示列可存儲的特定值。列類型說明符還能表示存放在列中的值的最大長度。對於某些類型,可用一個數值明確地說明其長度。而另外一些值,其長度由類型名蘊含。例如,CHAR(10) 明確指定了10個字元的長度,而TINYBLOB值隱含最大長度為255個字元。有的類型說明符允許指定最大的顯示寬度(即顯示值時使用多少個字元)。浮點類型允許指定小數位數,所以能控制浮點數的精度值為多少。

可以在列類型之後指定可選的類型說明屬性,以及指定更多的常見屬性。屬性起修飾類型的作用,並更改其處理列值的方式,屬性有以下類型:

(1)專用屬性用於指定列。例如,UNSIGNED 屬性只針對整型,而BINARY屬性只用於CHAR 和VARCHAR。

(2)通用屬性除少數列之外可用於任意列。可以指定NULL 或NOT NULL 以表示某個列是否能夠存放NULL。還可以用DEFAULT,def_value 來表示在創建一個新行但未明確給出該列的值時,該列可賦予值def_value。def_value 必須為一個常量;它不能是表達式,也不能引用其他列。不能對BLOB 或TEXT 列指定預設值。

如果想給出多個列的專用屬性,可按任意順序指定它們,只要它們跟在列類型之後、通用屬性之前即可。類似地,如果需要給出多個通用屬性,也可按任意順序給出它們,只要將它們放在列類型和可能給出的列專用屬性之後即可。

2. MySQL的列(欄位)類型

資料庫中的每個表都是由一個或多個列(欄位)構成的。在用CREATE TABLE語句創建一個表時,要為每列(欄位)指定一個類型。列(欄位)的類型比數據類型更為細化,它精確地描述了給定表列(欄位)可能包含的值的種類,如是否帶小數、是否文字很多。

MySQL有整數和浮點數值的列類型,如表1所示。整數列類型可以有符號也可無符號。有一種特殊的屬性允許整數列值自動生成,這對需要唯一序列或標識號的應用系統來說是非常有用的。

類型 說明

TINYINT 非常小的整數

SMALLINT 較小整數

MEDIUMINT 中等大小整數

INT 標准整數

BIGINT 較大整數

FLOAT 單精度浮點數

DOUBLE 雙精度浮點數

DECIMAL 一個串的浮點數

表1:數值列類型

每種數值類型的名稱和取值范圍如表2所示。

類型說明 取值范圍

TINYINT[(M)] 有符號值:-128 到127

無符號值:0到255(0 到28 - 1)
SMALLINT[(M)] 有符號值:-32768 到32767(- 215 到215 - 1)
無符號值:0到65535(0 到21 6 - 1)

MEDIUMINT[(M)] 有符號值:-8388608 到8388607(- 22 3 到22 3 - 1 )
無符號值:0到16777215(0 到22 4 - 1)

INT[(M)] 有符號值:-2147683648 到2147683647(- 231 到231- 1)
無符號值:0到4294967295(0 到232-1)

BIGINT[(M)] 有符號值:-9223372036854775808 到 9223373036854775807(- 263到263-1)

無符號值:0到18446744073709551615(0到264 – 1)

FLOAT[(M, D)] 最小非零值:±1.175494351E - 38

DOUBLE[(M,D)] 最小非零值:±2.2250738585072014E - 308

DECIMAL (M, D) 可變;其值的范圍依賴於M 和D

表2:數值列類型的取值范圍

類型說明 存儲需求

TINYINT[(M)] 1位元組

SMALLINT[(M)] 2位元組

MEDIUMINT[(M)] 3位元組

INT[(M)] 4位元組

BIGINT[(M)] 8位元組

FLOAT[(M, D)] 4位元組

DOUBLE[(M, D)] 8位元組

DECIMAL (M, D) M位元組(MySQL < 3.23),M+2位元組(MySQL > 3.23 )

表3:數值列類型的存儲需求

MySQL提供了五種整型: TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。INT為INTEGER的縮寫。這些類型在可表示的取值范圍上是不同的。整數列可定義為UNSIGNED從而禁用負值;這使列的取值范圍為0以上。各種類型的存儲量需求也是不同的。取值范圍較大的類型所需的存儲量較大。

MySQL 提供三種浮點類型: FLOAT、DOUBLE和DECIMAL。與整型不同,浮點類型不能是UNSIGNED的,其取值范圍也與整型不同,這種不同不僅在於這些類型有最大值,而且還有最小非零值。最小值提供了相應類型精度的一種度量,這對於記錄科學數據來說是非常重要的(當然,也有負的最大和最小值)。

在選擇了某種數值類型時,應該考慮所要表示的值的范圍,只需選擇能覆蓋要取值的范圍的最小類型即可。選擇較大類型會對空間造成浪費,使表不必要地增大,處理起來沒有選擇較小類型那樣有效。對於整型值,如果數據取值范圍較小,如人員年齡或兄弟姐妹數,則TINYINT最合適。MEDIUMINT能夠表示數百萬的值並且可用於更多類型的值,但存儲代價較大。BIGINT在全部整型中取值范圍最大,而且需要的存儲空間是表示範圍次大的整型INT類型的兩倍,因此只在確實需要時才用。對於浮點值,DOUBLE佔用FLOAT的兩倍空間。除非特別需要高精度或范圍極大的值,一般應使用只用一半存儲代價的FLOAT型來表示數據。

在定義整型列時,可以指定可選的顯示尺寸M。如果這樣,M應該是一個1 到255的整數。它表示用來顯示列中值的字元數。例如,MEDIUMINT(4)指定了一個具有4個字元顯示寬度的MEDIUMINT列。如果定義了一個沒有明確寬度的整數列,將會自動分配給它一個預設的寬度。預設值為每種類型的「最長」值的長度。如果某個特定值的可列印表示需要不止M個字元,則顯示完全的值;不會將值截斷以適合M個字元。

對每種浮點類型,可指定一個最大的顯示尺寸M 和小數位數D。M 的值應該取1 到255。D的值可為0 到3 0,但是不應大於M - 2(如果熟悉ODBC 術語,就會知道M 和D 對應於ODBC 概念的「精度」和「小數點位數」)。M和D對FLOAT和DOUBLE 都是可選的,但對於DECIMAL是必須的。在選項M 和D時,如果省略了它們,則使用預設值。

2.2字元串列類型

MySQL提供了幾種存放字元數據的串類型,其類型如下:

類型名 說明

CHAR 定長字元串

VARCHAR 可變長字元串

TINYBLOB 非常小的BLOB(二進制大對象)

BLOB 小BLOB

MEDIUMBLOB 中等的BLOB

LONGBLOB 大BLOB

TINYTEXT 非常小的文本串

TEXT 小文本串

MEDIUMTEXT 中等文本串

LONGTEXT 大文本串

ENUM 枚舉;列可賦予某個枚舉成員

SET 集合;列可賦予多個集合成員

表4:字元串列類型

下表給出了MySQL 定義串值列的類型,以及每種類型的最大尺寸和存儲需求。對於可變長的列類型,各行的值所佔的存儲量是不同的,這取決於實際存放在列中的值的長度。這個長度在表中用L 表示。

類型說明

最大尺寸

存儲需求

CHAR( M)

M 位元組

M 位元組

VARCHAR(M)

M 位元組

L + 1位元組

TINYBLOB, TINYTEXT

28- 1位元組

L + 1位元組

BLOB, TEXT

216 - 1 位元組

L + 2位元組

MEDIUMBLOB, MEDIUMTEXT

224- 1位元組

L + 3位元組

LONGBLOB, LONGTEXT

232- 1位元組

L + 4位元組

ENUM(「value1」, 「value2」, ...)

65535 個成員

1 或2位元組

SET (「value1」, 「value2」, ...)

64個成員

1、2、3、4 或8位元組

表5:串列類型最大尺寸及存儲需求

L 以外所需的額外位元組為存放該值的長度所需的位元組數。MySQL 通過存儲值的內容及其長度來處理可變長度的值。這些額外的位元組是無符號整數。請注意,可變長類型的最大長度、此類型所需的額外位元組數以及佔用相同位元組數的無符號整數之間的對應關系。例如,MEDIUMBLOB 值可能最多224 - 1位元組長並需要3 個位元組記錄其結果。3 個位元組的整數類型MEDIUMINT 的最大無符號值為224 - 1。這並非偶然。

2.3日期時間列類型

MySQL 提供了幾種時間值的列類型,它們分別是: DATE、DATETIME、TIME、TIMESTAMP和YEAR。下表給出了MySQL 為定義存儲日期和時間值所提供的這些類型,並給出了每種類型的合法取值范圍。

類型名 說明

DATE 「YYYY-MM-DD」格式表示的日期值

TIME 「hh:mm:ss」格式表示的時間值

DATETIME 「YYYY-MM-DD hh:mm:ss」格式

TIMESTAMP 「YYYYMMDDhhmmss」格式表示的時間戳值

YEAR 「YYYY」格式的年份值

表6:日期時間列類型

下面舉個例子:

這個例子創建一個student表,這個表中有name欄位,字元類型列,不允許NULL(空值)。有Chinese、Maths和English三個整數類型列。還有個Birthday日期類型列。

CREATE TABLE student
(
Name varchar(20) NOT NULL,
Chinese TINYINT(3),
Maths TINYINT(3),
English TINYINT(3),
Birthday DATE

)

④ SQL中的各數據類型代表什麼含義

數據類型 存儲大小 說明
BINARY 每個字元佔一個位元組 任何類型的數據都可存儲在這種類型的欄位中。不需數據轉換(例如,轉換到文本數據)。數據輸入二進制欄位的方式決定了它的輸出方式。
BIT 1 個位元組 Yes 和 No ,以及只包含這兩個數值之一的欄位。
TINYINT 1 個位元組 介於 0 到 255 之間的整型數。
MONEY 8 個位元組 介於 – 922,337,203,685,477.5808 到 922,337,203,685,477.5807 之間的符號整數。
DATETIME
(清參閱 DOUBLE ) 8 個位元組 介於 100 到 9999 年的日期或時間數值。
UNIQUEIDENTIFIER 128 個位 用於遠程過程調用的唯一識別數字。
REAL 4 個位元組 單精度浮點數,負數范圍是從 –3.402823E38 到 –1.401298E-45,正數從1.401298E-45 到 3.402823E38,和 0。
FLOAT 8 個位元組 雙精度浮點數,負數范圍是從 –1.79769313486232E308 到 –4.94065645841247E-324,正數從 4.94065645841247E-324 到 1.79769313486232E308,和 0。
SMALLINT 2 個位元組 介於 –32,768 到 32,767 的短整型數。
INTEGER 4 個位元組 介於 –2,147,483,648 到 2,147,483,647 的長整型數。
DECIMAL 17 個位元組 容納從 1028 - 1到 - 1028 - 1. 的值的精確的數字數據類型。你可以定義精度 (1 - 28) 和 符號 (0 - 定義精度)。預設精度和符號分別是18和0。
TEXT 每一字元兩位元組(參見注意) 從零到最大 2,14 千兆位元組。
IMAGE 視實際需要而定 從零到最大 2,14 千兆位元組。用於 OLE 對象。
CHARACTER 每一字元兩位元組(參見注意) 長度從 0 到 255 個字元。

⑤ sql server 小數欄位設為哪種類型

在SQL Server中,實際上小數數值只有兩種數據類型:float和decimal,分別是近似數值和精確數值。

float 表示近似數值,存在精度損失,數據類型是 float(n),n是可選的,默認類型是float(53),佔用8bytes。雖然n的取值范圍是1-53,實際上,float 只能表示兩種類型float(53) 和 float(24),分別佔用 8Bytes 和 4Bytes。

decimal不存在精度損失,數據類型decimal(p,s) 需要分別指定小數的最大位數(p)和小數位的數量(s)。decimal 數據類型的最大精度為 38。即decimal 數據類型最多可以存儲 38位數字,所有這些數字均可位於小數點後面。decimal 數據類型存儲精確的數字表示形式,沒有近似值。

(5)sql雙精度怎麼表示擴展閱讀:

雙精度(double precision)數據類型等價於 float(53),real等價於float(24),numeric是 decimal的同義詞,應該避免在程序中直接使用double precision、real和numeric,而是用 float(24) 、float(53)和decimal 代替。

float是近似數值,存在精度缺失;decimal是精確數值,不存在精度損失。當數值不允許精度丟失時,使用 decimal數據類型存儲數據。在計算小數的除法時,SQL Server 內部隱式升級數據類型,根據小數數值的數據類型,就近向float(24) 或float(53)轉換。

⑥ SQL SERVER資料庫的單精度和雙精度數據類型的名稱叫什麼

單精度是 float
雙精度是double

⑦ SQL Server中double數據類型

SQL Server沒有double類型,若是你需要用雙精度數據,如果不固定小數位,用float就可以了;
若是固定小數位,可以用numric;如果整數和小數都出現,可以用real

⑧ mysql float和double類型的區別

1.float類型
float列類型默認長度查不到結果,必須指定精度,比如
num float, insert into table (num) values (0.12); select * from table where num=0.12的話,empty set。
num float(9,7), insert into table (num) values (0.12); select * from table where num=0.12的話會查到這條記錄。

mysql> create table tt
-> (
-> num float(9,3)
-> );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into tt(num)values(1234567.8);
Query OK, 1 row affected, 1 warning (0.04 sec)
註:超出欄位范圍,插入數據有誤

mysql> select * from tt;
+-------------+
| num |
+-------------+
| 1000000.000 |
+-------------+
2 rows in set (0.00 sec)

***************************************************************************

註:通常在 Linux 下安裝完 MySQL 後,默認的 sql-mode 值是空,在這種情形下 mysql 執行的是一種不嚴格的檢查,例如日期欄位可以插入 』 0000-00-00 00:00:00 』這樣的值,還有如果要插入的欄位長度超過列定義的長度,那麼 mysql 不會終止操作,而是會自動截斷後面的字元繼續插入操作。
我們發現插入的字元被自動截斷了,但是如果我們本意希望如果長度超過限制就報錯,那麼我們可以設置 sql_mode 為 STRICT_TRANS_TABLES ,如下:
mysql> set session sql_mode='STRICT_TRANS_TABLES';
這樣我們再執行同樣的操作,mysql 就會告訴我們插入的值太長,操作被終止,如下:
mysql> insert into tt(num) values(1234567.8);
ERROR 1264 (22003): Out of range value for column 'num' at row 1

***************************************************************************

mysql> insert into tt(num)values(123456.8);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tt;
+-------------+
| num |
+-------------+
| 1000000.000 |
| 123456.797 |
+-------------+
2 rows in set (0.00 sec)
註:小數位數不夠,自動補齊,但是存在一個問題就是如上的近似值。

mysql> insert into tt(num)values(123456.867);
Query OK, 1 row affected (0.04 sec)

mysql> select * from tt;
+-------------+
| num |
+-------------+
| 1000000.000 |
| 123456.797 |
| 123456.867 |
+-------------+
3 rows in set (0.00 sec)

mysql> select * from tt where num=123456.867;
+------------+
| num |
+------------+
| 123456.867 |
+------------+
1 row in set (0.00 sec)

mysql> insert into tt(num)values(2.8);
Query OK, 1 row affected (0.04 sec)

mysql> select * from tt;
+-------------+
| num |
+-------------+
| 1000000.000 |
| 123456.797 |
| 123456.867 |
| 2.800 |
+-------------+
4 rows in set (0.00 sec)

mysql> select * from tt where num=2.8;
+-------+
| num |
+-------+
| 2.800 |
+-------+
1 row in set (0.00 sec)

mysql> insert into tt(num)values(2.888888);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tt;
+-------------+
| num |
+-------------+
| 1000000.000 |
| 123456.797 |
| 123456.867 |
| 2.800 |
| 2.889 |
+-------------+
5 rows in set (0.00 sec)
註:小數位數超了,自動取近似值。

--------------------------------------------------------------------------------------

2.double類型

mysql> create table tt(
-> num double(9,3)
-> );
Query OK, 0 rows affected (0.04 sec)

mysql> insert into tt(num) values(234563.9);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tt;
+------------+
| num |
+------------+
| 234563.900 |
+------------+
1 row in set (0.00 sec)

mysql> insert into tt(num) values(2345623.2);
Query OK, 1 row affected, 1 warning (0.04 sec)
mysql> insert into tt(num) values(234563.2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tt;
+------------+
| num |
+------------+
| 234563.900 |
| 999999.999 |
| 234563.200 |
+------------+
2 rows in set (0.00 sec)

mysql> insert into tt(num) values(2.8);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tt;
+------------+
| num |
+------------+
| 234563.900 |
| 999999.999 |
| 234563.200 |
| 2.800 |
+------------+
3 rows in set (0.00 sec)

FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。這里,「(M,D)」表示該值一共顯示M位整數,其中D位位於小數點後面。
例如,定義為FLOAT(7,4)的一個列可以顯示為-999.9999。MySQL保存值時進行四捨五入,因此如果在FLOAT(7,4)列內插入999.00009,近似結果是999.0001。

單精度浮點數(float)的尾數是用24bit表示的,雙精度(double)浮點數的尾數是用53bit表示的,轉換成十進制:
2^24 - 1 = 16777215
2^53 - 1 = 9007199254740991
由上可見,IEEE754單精度浮點數的有效數字二進制是24位,按十進制來說,是8位;雙精度浮點數的有效數字二進制是53位,按十進制來說,是16 位。

⑨ mysql 資料庫float,int,bigint,double區別

mysql 資料庫float,int,bigint,double區別
單精度浮點數(float)的尾數是用24bit表示的,雙精度(double)浮點數的尾數是用53bit表示的,轉換成十進制: 2^24 - 1 = 16777215 2^53 - 1 = 9007199254740991 由上可見,IEEE754單精度浮點數的有效數字二進制是24位,按十進制來說

⑩ 怎麼用SQL代碼建立雙精度型欄位

在SQL SERVER 中這么定義

abc numeric(18,2)

其中:18表示,最大18位數字
2表示小數位數為2