শতাংশ মান ধরে রাখার জন্য উপযুক্ত ডেটাটাইপ?


উত্তর:


132

আপনার শতাংশে দুটি দশমিক স্থান ধরে নেওয়া, আপনি যে ধরণের ডেটা ব্যবহার করেন তা নির্ভর করে আপনি কীভাবে আপনার শতাংশ সংরক্ষণের পরিকল্পনা করছেন। যদি আপনি তাদের ভগ্নাংশের সমতুল্য (উদাহরণস্বরূপ, 100.00% কে 1.0000 হিসাবে সঞ্চিত) সঞ্চয় করতে চলেছেন তবে আমি কোনও decimal(5,4)ডাটা টাইপে কোনও CHECKসীমাবদ্ধতার সাথে ডেটা সংরক্ষণ করব যা নিশ্চিত করে যে মানগুলি কখনই 1.0000 (যেটিকে ক্যাপটি ধরে নিচ্ছে) অতিক্রম করবে না এবং কখনও 0 এর নিচেও যাবে না (ধরে নিলাম যে মেঝে)। আপনি যদি তাদের মুখের মানটি সংরক্ষণ করতে চলেছেন (যেমন 100.00% 100.00 হিসাবে সঞ্চিত থাকে) তবে আপনার decimal(5,2)উপযুক্ত CHECKবাধা দিয়ে ব্যবহার করা উচিত । একটি ভাল কলামের নামের সাথে একত্রিত হয়ে এটি অন্যান্য বিকাশকারীদের কাছে ডেটা কী এবং কীভাবে ডেটা কলামে সংরক্ষণ করা হয় তা পরিষ্কার করে দেয়।


12
decimal(5,2)দশমিক বিভাজকের পরে 2 অঙ্কের সংখ্যাকে যেখানে বোঝায় সেখানে কি এটি হওয়া উচিত নয় ?
বরিস কলেনস

2
@ বরিসক্যালেনস - বিশ্বাস করতে পারি না যে আমি এত বছর মিস করেছি। হ্যাঁ, এটি একটি টাইপো। decimal(5,2)চেক সীমাবদ্ধতার সাথে ক্যাপচার করা উচিত।
থমাস

4
আমি ধরে নিলাম উপরোক্ত মন্তব্যের পরে এটি মূলত ছিল decimal(5,4)এবং পরিবর্তিত হয়েছিল decimal(5,2)... আমার মনে decimal(5,4)হয় আরও ভাল সংজ্ঞা হবে - যেমন আপনি 0 থেকে 100 না করে 2 দশমিক স্থানে 0 থেকে 1 সঞ্চয় করতে চান a শতাংশ হওয়ার কারণটি বাইরে নেই 100; সুতরাং 100% হল 100/100 যা 1। এটি এভাবে করা বেশিরভাগ ক্ষেত্রে (যেমন 100% * 100% = 100%, না 10000%; 1 * 1 = 1) আরও বোধ করে।
জনএলবেওয়ান

4
@ জন এলবিয়ান - এটি কীভাবে সংরক্ষণ করা হচ্ছে তা ব্যয় করে। যদি মানগুলি প্রদর্শিত (যেমন 100.00) হিসাবে সঞ্চিত হয় তবে আপনার প্রয়োজন decimal(5,2)। যদি মানগুলি ভগ্নাংশ (উদাঃ 1.0000) হিসাবে সংরক্ষণ করা হয় তবে আপনার প্রয়োজন decimal(5,4)। পোস্ট আপডেট করবে।
থমাস

আপনার 4 দশমিক স্থানের প্রয়োজন কেন কেউ ব্যাখ্যা করতে পারেন? আপনি 2 ব্যবহার করতে পারেন? .91 === 91% বা 1.00 === 100%। আমি এখন এটি বাস্তবায়ন করছি এবং 4 টি জায়গা নিয়ে লাভের কথা ভাবছিলাম। Pct দশমিক (10, 2) এর মতো কিছু পরীক্ষা করুন (Pct> =। 01 এবং Pct <= 1)। আগাম ধন্যবাদ.
এমএইচ

31
  • একটি হিসাবে রাখা decimal
  • আপনি যদি সীমাটি সীমাবদ্ধ করতে চান তবে চেক সীমাবদ্ধতাগুলি যুক্ত করুন (যেমন 0 থেকে 100% এর মধ্যে; কিছু ক্ষেত্রে 100% ছাড়িয়ে যাওয়ার সম্ভাব্য কারণ বা সম্ভাব্য এমনকি নেতিবাচক ক্ষেত্রেও থাকতে পারে)।
  • মানটিকে 1% হিসাবে 100%, 0.5 হিসাবে 50% ইত্যাদি হিসাবে বিবেচনা করুন এটি কোনও গণিত ক্রিয়াকলাপকে প্রত্যাশা অনুযায়ী কাজ করতে দেয় (যেমন 100 এর মান হিসাবে 100% ব্যবহার করার বিপরীতে)।
  • যথাযথতা এবং স্কেল যথাযথভাবে সংশোধন করুন (বন্ধনীতে এগুলি দুটি মান Prec যথার্থতা columnName decimal(precision, scale)বলে যে সংখ্যায় মোট অঙ্কের সংখ্যা নির্ধারণ করা যায়, স্কেল বলে যে দশমিক স্থানের পরে এর কতটি রয়েছে, সুতরাং decimal(3,2)একটি সংখ্যা যা প্রতিনিধিত্ব করা যায় যেমন #.##; decimal(5,3)হবে ##.###
  • decimalএবং numericমূলত একই জিনিস। তবে decimalএএনএসআই অনুগত, সুতরাং অন্যথায় না বলা (যেমন আপনার সংস্থার কোডিং মান অনুসারে) সর্বদা এটি ব্যবহার করুন।

উদাহরণস্বরূপ

  • আপনার ক্ষেত্রে (0.00% থেকে 100.00%) আপনি চাইবেন decimal(5,4)
  • সর্বাধিক সাধারণ ক্ষেত্রে (0% থেকে 100%) আপনি চাইবেন 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)
    )

আরও পড়া:


4

আমি থমাসের সাথে একমত এবং আমি কমপক্ষে ডাব্লুপিএফ অ্যাপ্লিকেশনগুলির জন্য ডেসিমাল (5,4) সমাধানটি বেছে নেব।

কেন এমএসডিএন সংখ্যাসূচক ফর্ম্যাট স্ট্রিংটি দেখুন: http://msdn.microsoft.com/en-us/library/dwhawy9k#P FormatString

শতাংশ ("পি") ফর্ম্যাট স্পেসিফায়ার একটি সংখ্যাকে 100 দ্বারা গুণিত করে এবং একটি স্ট্রিংয়ে রূপান্তর করে যা শতাংশকে উপস্থাপন করে।

তাহলে আপনি এটি আপনার এক্সএএমএল কোডটিতে ব্যবহার করতে সক্ষম হবেন:

DataFormatString="{}{0:P}"

2

যদি 2 দশমিক স্থানগুলি আপনার নির্ভুলতার স্তর হয় তবে একটি "ছোট্ট" এটিকে ক্ষুদ্রতম স্থানে (2-বাইট) পরিচালনা করবে। আপনি 100 দ্বারা গুণিত শতাংশ সংরক্ষণ করুন।

সম্পাদনা: দশমিক প্রকারটি সম্ভবত আরও ভাল ম্যাচ। তারপরে আপনাকে ম্যানুয়ালি স্কেল করার দরকার নেই। এটিতে প্রতিটি মূল্য 5 বাইট লাগে।


মাইক্রোসফ্ট এর অনেকগুলি লিঙ্ক
ভেঙেছে

0

সংখ্যাসূচক (এন, এন) ব্যবহার করুন যেখানে এন এর পর্যাপ্ত রেজোলিউশন রয়েছে যেখানে 1.00 হয়। এই ক্ষেত্রে:

declare @discount numeric(9,9)
    , @quantity int
select @discount = 0.999999999
    , @quantity = 10000

select convert(money, @discount * @quantity)

3
এই প্রশ্নের তিন বছরেরও বেশি সময় আগে থেকে মোটামুটি উচ্চ রেটেড গ্রহণযোগ্য উত্তর রয়েছে। আপনি উত্তর করতে খুঁজছি হয় পুরাতন প্রশ্নের জন্য, এখানে পড়ুন দয়া করে: stackoverflow.com/unanswered
valverij
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.