DB관련/SQL Server

decimal 와 numeric의 차이 + Money Data Type (C#)

saltdoll 2019. 9. 26. 03:01
반응형

돈의 계산을 이용할때는, decimal을 사용하는 것이 바랍직합니다.

특히 C#에서는 decimal를 꼭 써줘야 합니다. (numeric이 없긴하죠)

화폐 단위는 decimal사용

 

DB에서는 크게 차이를 못느낄 정도로 많은 차이가 없습니다.

 

 

 

decimal[ (p[ ,s] )] and numeric[ (p[ ,s] )]
Fixed precision and scale numbers. When maximum precision is used, valid values are from - 10^38 +1 through 10^38 - 1. The ISO synonyms for decimal are dec and dec(p, s). numericis functionally identical to decimal.

 

p (precision) 정밀도
The maximum total number of decimal digits to be stored. This number includes both the left and the right sides of the decimal point. precision 값은 1에서 ~ 최대 38까지 가능하며, default은 18입니다.

 

s (scale) 스케일
소수점 오른쪽에 저장된 소수 자릿수 입니다. This number is subtracted from p to determine the maximum number of digits to the left of the decimal point. Scale must be a value from 0 through p, and can only be specified if precision is specified. The default scale is 0 and so 0 <= s <= p. Maximum storage sizes vary, based on the precision.

 

 

Examples

The following example creates a table using the decimal and numeric data types. Values are inserted into each column. The results are returned by using a SELECT statement.

CREATE TABLE dbo.MyTable  
(  
  MyDecimalColumn decimal(5,2)  
 ,MyNumericColumn numeric(10,5) 
);  
  
GO  

INSERT INTO dbo.MyTable VALUES (123, 12345.12);  
GO  

SELECT MyDecimalColumn, MyNumericColumn  
FROM dbo.MyTable;    

결과

MyDecimalColumn                         MyNumericColumn  
--------------------------------------- ---------------------------------------  
123.00                                  12345.12000  
  
(1 row(s) affected)  

 

 

https://docs.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-2017

 

 

 

C# 숫자형 TYPE들

C#에서 나오는 숫자 타입에 쓸수 있는 타입들: 돈을 사용하는 곳에는 decimal를 꼭 이용해 주세요.

가장 큰 문제는 나눗셈과 같은 경우, 데이터 타입별로 조금씩 차이가 나는 현상이 발생합니다.

 

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types

 

 

http://www.blackwasp.co.uk/CSharpNumericDataTypes.aspx

Integer Data Types

TypeDescriptionMinimumMaximumBits

Type Description Minimum Maximum Bits
bool Boolean flag false true 1
byte Unsigned Byte 0 255 8
sbyte Signed Byte -128 127 8
short Signed Short Integer -32,768 32,767 16
ushort Unsigned Short Integer 0 65,535 16
int Signed Integer -2,147,483,648 2,147,483,647 32
uint Unsigned Integer 0 4,294,967,295 32
long Signed Long Integer -9x1018 9x1018 64
ulong Unsigned Long Integer 0 1.8x1019 64

Non-Integer (Floating Point) Data Types

TypeDescriptionScalePrecisionBits

Type Description Scale Precision Bits
float Single Precision Number ±1.5x10-45 to ±3.4x1038 7 digits 32
double Double Precision Number ±5x10-324 to ±1.7x10308 15 or 16 digits 64
decimal Decimal Number ±10-28 to ±7.9x1028 28 or 29 digits 128

 

 

반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)