ประเภทข้อมูลที่ดีที่สุดสำหรับการเก็บค่าเปอร์เซ็นต์ตั้งแต่ 0.00% ถึง 100.00% คืออะไร
ประเภทข้อมูลที่ดีที่สุดสำหรับการเก็บค่าเปอร์เซ็นต์ตั้งแต่ 0.00% ถึง 100.00% คืออะไร
คำตอบ:
สมมติว่ามีทศนิยมสองตำแหน่งในเปอร์เซ็นต์ของคุณประเภทข้อมูลที่คุณใช้ขึ้นอยู่กับว่าคุณวางแผนจะจัดเก็บเปอร์เซ็นต์ของคุณอย่างไร หากคุณกำลังจะจัดเก็บการเทียบเท่าเศษส่วน (เช่น 100.00% เก็บไว้ที่ 1.0000) ฉันจะจัดเก็บข้อมูลในdecimal(5,4)ประเภทข้อมูลโดยมีCHECKข้อ จำกัด ที่ทำให้แน่ใจได้ว่าค่าจะไม่เกิน 1.0000 (สมมติว่าเป็นค่าสูงสุด) และไม่เคยต่ำกว่า 0 (สมมติว่าเป็นพื้น). หากคุณกำลังจะจัดเก็บมูลค่าที่ตราไว้ (เช่น 100.00% จัดเก็บเป็น 100.00) คุณควรใช้decimal(5,2)ด้วยCHECKข้อ จำกัดที่เหมาะสม เมื่อรวมกับชื่อคอลัมน์ที่ดีทำให้นักพัฒนาคนอื่น ๆ เข้าใจได้อย่างชัดเจนว่าข้อมูลคืออะไรและจัดเก็บข้อมูลในคอลัมน์อย่างไร
decimal(5,2)ที่ 2 หมายถึงจำนวนหลักหลังตัวคั่นทศนิยมไม่ใช่หรือ?
decimal(5,2)คือสิ่งที่ควรจับด้วยข้อ จำกัด ในการตรวจสอบ
decimal(5,4)และเปลี่ยนเป็นdecimal(5,2)หลังจากความคิดเห็นด้านบน ... ฉันคิดว่าdecimal(5,4)น่าจะเป็นคำจำกัดความที่ดีกว่านั่นคือคุณต้องการจัดเก็บ 0 ถึง 1 โดยมีทศนิยม 2 ตำแหน่งไม่ใช่ 0 ถึง 100 เหตุผลที่เป็นเปอร์เซ็นต์ไม่อยู่ใน 100; ดังนั้น 100% จึงเป็น 100/100 ซึ่งก็คือ 1 การทำแบบนี้จะเข้าท่ากว่าสำหรับกรณีส่วนใหญ่ (เช่น100% * 100% = 100%ไม่ใช่10000%; 1 * 1 = 1)
100.00) decimal(5,2)แล้วคุณจะต้อง ถ้าค่าจะถูกเก็บไว้เป็นเศษส่วน (เช่น1.0000) decimal(5,4)แล้วคุณจะต้อง จะมาอัพเดทกระทู้.
decimal.columnName decimal(precision, scale)Precision บอกจำนวนหลักทั้งหมดที่สามารถถือเป็นตัวเลขได้สเกลบอกจำนวนตัวเลขที่อยู่หลังตำแหน่งทศนิยมดังนั้นจึงdecimal(3,2)เป็นตัวเลขที่สามารถแสดงได้ เป็น#.##; จะเป็น decimal(5,3)##.###decimalและnumericโดยพื้นฐานแล้วเป็นสิ่งเดียวกัน อย่างไรก็ตามdecimalเป็นไปตามมาตรฐาน ANSI ดังนั้นควรใช้สิ่งนั้นเสมอเว้นแต่จะบอกไว้เป็นอย่างอื่น (เช่นตามมาตรฐานการเข้ารหัสของ บริษัท ของคุณ)ตัวอย่างสถานการณ์
decimal(5,4)ที่คุณต้องการdecimal(3,2)ที่คุณต้องการตัวอย่าง:
if object_id('Demo') is null
create table Demo
(
Id bigint not null identity(1,1) constraint pk_Demo primary key
, Name nvarchar(256) not null constraint uk_Demo unique
, SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1)
, SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1)
)
อ่านเพิ่มเติม:
0 to 1เทียบกับ0 to 100: C #: การจัดเก็บเปอร์เซ็นต์ 50 หรือ 0.50?ฉันเห็นด้วยกับ Thomas และฉันจะเลือกโซลูชัน DECIMAL (5,4) อย่างน้อยสำหรับแอปพลิเคชัน WPF
ดูที่ MSDN Numeric Format String เพื่อทราบสาเหตุ: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
ตัวระบุรูปแบบเปอร์เซ็นต์ ("P") จะคูณตัวเลขด้วย 100 และแปลงเป็นสตริงที่แสดงถึงเปอร์เซ็นต์
จากนั้นคุณจะสามารถใช้สิ่งนี้ในรหัส XAML ของคุณ:
DataFormatString="{}{0:P}"
ใช้ตัวเลข (n, n) โดยที่ n มีความละเอียดเพียงพอที่จะปัดเศษเป็น 1.00 ตัวอย่างเช่น:
declare @discount numeric(9,9)
, @quantity int
select @discount = 0.999999999
, @quantity = 10000
select convert(money, @discount * @quantity)