এসকিউএল সার্ভারে সংখ্যা, ভাসা এবং দশমিকের মধ্যে পার্থক্য


322

মধ্যে পার্থক্য কি কি numeric, floatএবং decimaldatatypes এবং যা যা পরিস্থিতিতে ব্যবহার করা উচিত?

যে কোনও ধরণের আর্থিক লেনদেনের জন্য (যেমন বেতন ক্ষেত্রের জন্য), কোনটি পছন্দনীয় এবং কেন?


1
উপরের দশমিক এবং সংখ্যাসূচক লিঙ্কটি ডকস.মাইক্রোসফট.ইন.ইউএস / এসকিএল / ট- এসকিএল / ডেটা- টাইপস / to এ আপডেট করা দরকার । উপরের লিঙ্কটি আর বিদ্যমান নেই।
নাইজেল আইনস্কো

1
সাধারণত, আর্থিক বিষয় নিয়ে কাজ করার সময় ভাসমান-পয়েন্টগুলি বাদ দিয়ে পূর্ণসংখ্যার প্রকারের সাথে কাজ করা আকর্ষণীয় এবং উদাহরণস্বরূপ ডলারের পরিবর্তে মানগুলি সেন্ট হিসাবে সংরক্ষণ করে ।
পেড্রো

উত্তর:


493

দশমিক (38 অঙ্ক পর্যন্ত) প্রদত্ত নির্ভুলতা অপর্যাপ্ত হলেই ভাসা বা বাস্তব তথ্য প্রকারগুলি ব্যবহার করুন

  • আনুমানিক সংখ্যা সংক্রান্ত ডেটা প্রকারগুলি অনেক সংখ্যার জন্য নির্দিষ্ট করে দেওয়া সঠিক মানগুলি সঞ্চয় করে না ; তারা দোকান একটি অত্যন্ত ঘনিষ্ঠ মূল্যের পড়তা। ( TechNet )

  • যেখানে ক্লাউজ অনুসন্ধানের শর্তাদি, বিশেষত = এবং <> অপারেটর ( টেকনেট ) -এ ফ্ল্যাট বা আসল কলামগুলি ব্যবহার করা এড়িয়ে চলুন

সুতরাং সাধারণত যেহেতু দশমিকের দ্বারা প্রদত্ত নির্ভুলতা হ'ল [10E38 ~ 38 ডিজিট] ​​যদি আপনার নম্বরটি এতে ফিট করতে পারে তবে ফ্লোটের ছোট স্টোরেজ স্পেস (এবং সম্ভবত গতি) গুরুত্বপূর্ণ না এবং অস্বাভাবিক আচরণগুলি এবং আনুমানিক সংখ্যার প্রকারের সমস্যাগুলি মোকাবেলা করা না হলে গ্রহণযোগ্য, সাধারণত দশমিক ব্যবহার করুন

আরও দরকারী তথ্য

  • সংখ্যাগত = দশমিক (5 থেকে 17 বাইট) ( সুনির্দিষ্ট সংখ্যার ডেটা টাইপ)
    • .NET এ দশমিক মানচিত্র করবে
    • উভয়েরই এসকিউএল সার্ভারে ডিফল্ট (নির্ভুলতা, স্কেল) পরামিতি হিসাবে রয়েছে (18, 0)
    • স্কেল = দশমিক অঙ্কের সর্বাধিক সংখ্যা যা দশমিক বিন্দুর ডানদিকে সংরক্ষণ করা যেতে পারে।
    • দয়া করে নোট করুন যে টাকা (8 বাইট) এবং স্মলমনি (4 বাইট) ডেসিমল ইন। নেট এও মানচিত্র এবং 4 টি দশমিক পয়েন্ট রয়েছে ( এমএসডিএন )
    • দশমিক এবং সংখ্যাসূচক (লেনদেন-এসকিউএল) - এমএসডিএন
  • আসল (4 বাইট) ( আনুমানিক সংখ্যার ডেটা টাইপ)
  • ভাসা (8 বাইট) ( আনুমানিক সংখ্যার ডেটা টাইপ)
    • .NET ডাবল করতে মানচিত্র হবে
  • প্রসেসরের আর্কিটেকচার কোন ধরণের ব্যবহৃত হচ্ছে বা সংখ্যার পরিমাণ কত তা নির্বিশেষে সমস্ত সঠিক সংখ্যার প্রকারগুলি সর্বদা একই ফল উত্পন্ন করে
  • ভাসমান ডেটা টাইপের সরবরাহ করা প্যারামিটারটি বিটগুলির সংখ্যা নির্ধারণ করে যা ভাসমান পয়েন্ট সংখ্যার ম্যান্টিসা সংরক্ষণ করতে ব্যবহৃত হয় ।
  • আনুমানিক সংখ্যাসূচক ডেটা টাইপ সাধারণত কম সঞ্চয়স্থান ব্যবহার করে এবং আরও ভাল গতি (20x অবধি) থাকে এবং সেগুলি কখন .NET এ রূপান্তরিত হয় সে বিষয়ে আপনাকেও বিবেচনা করা উচিত

সঠিক সংখ্যা সংক্রান্ত তথ্য প্রকার আনুমানিক সংখ্যা সংক্রান্ত প্রকারভেদ

মূল উত্স : এমসিটিএস স্ব-গতিযুক্ত প্রশিক্ষণ কিট (পরীক্ষা 70-433): মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০৮ ডাটাবেস ডেভলপমেন্ট - অধ্যায় 3 - টেবিল, ডেটা প্রকারসমূহ এবং ঘোষিত ডেটা ইন্টিগ্রিটি পাঠ 1 - ডেটা টাইপ (গাইডলাইন) নির্বাচন - পৃষ্ঠা 93


17
use the float or real data types only if the precision provided by decimal is insufficient- আমি ভেবেছিলাম আসল হ'ল নির্ভুল তবে দশমিক, তাই দশমিক অপর্যাপ্ত হলে আপনি কীভাবে আসল ব্যবহার করতে লিখবেন?
BornToCode

7
সত্যটি কম কম সঠিক তাই সুপারিশ করা হয় না যতক্ষণ না বড় সংখ্যক বড় দশমিক (> 10e38) সংরক্ষণ করা প্রয়োজন হয় বা স্থান বিবেচনা করা হয়। আমি অনুমান করি এখানে উদ্ধৃতিতে যথার্থতার যথার্থতা নয় যথাযোগ্যতা
ইমান

11
@ বার্নটোকোড এখানে "নির্ভুলতা" বলতে বোঝায় যে আপনি যে মানগুলি সংরক্ষণ করতে চান তা কত বিস্তৃত। আপনার যদি 1e10 এবং 1e-10 এর মধ্যে মান সংরক্ষণ decimalকরতে হয় তবে তা ঠিক হয়ে যাবে। এটি 20 এর যথার্থতা you যদি আপনাকে 1e20 এবং 1e-20 এর মধ্যে মানগুলি সংরক্ষণ decimal করতে হয় তবে ভাল, এটি করতে পারবেন না । এটি নির্ভুলতার 40 ডিজিট। আপনি একই decimalক্ষেত্রে 1e20 এবং 1e-20 সঞ্চয় করতে পারবেন না । পরিবর্তে, আপনি ব্যবহার করতে পারেন float, যা অভ্যন্তরীণভাবে সবকিছুকে বেস 2 এর লগ হিসাবে সঞ্চয় করে That এটি একটি ক্ষেত্রের মধ্যে পুরোপুরি যথাযথতাটি দেয় যে অসুবিধাটির সাথে কেবল প্রথম ~ 8 অঙ্কগুলি সঠিক হবে।
বেকন বিটস

আমি তৃতীয় বোর্নটোকোড এবং ইমানের মন্তব্য। আমি সবেমাত্র পরীক্ষা করেছি (এসকিউএল সার্ভার 2012 ব্যবহার করে) এবং এটি মনে হয় যে ফ্লোটের জন্য মেশিনের অ্যাপসিলন (53), সর্বোচ্চ-নির্ভুলতা ভাসমান পয়েন্ট টাইপ, 2.22044604925031E-16 is সুতরাং আপনি এটি থেকে প্রায় 15 টি গুরুত্বপূর্ণ চিত্র পাবেন। অন্যদিকে, আমি দশমিকের বাইরে 38 টি গুরুত্বপূর্ণ চিত্র পেতে পারি।
স্টিয়ার্ট

"ব্যবহার করুন float..." - বললেন কে? এটি কি একটি উক্তি বা আপনার মতামত?
ব্যবহারকারী 443854

24

এমএসডিএন থেকে নির্দেশিকা: দশমিক, ভাসমান এবং আসল ডেটা ব্যবহার করে

সংখ্যাসূচক এবং দশমিক তথ্য প্রকারের ডিফল্ট সর্বাধিক যথাযথতা 38 Trans দশমিকের সাথে সংখ্যা সংরক্ষণ করতে দশমিক তথ্য প্রকারটি ব্যবহার করুন যখন ডেটা মানগুলি নির্দিষ্ট হিসাবে সঞ্চিত রাখতে হবে।

ফ্লোট এবং রিয়েল এর আচরণ আনুমানিক সংখ্যার ডেটা টাইপগুলিতে আইইইই 754 নির্দিষ্টকরণ অনুসরণ করে follows ভাসমান এবং আসল ডেটা ধরণের আনুমানিক প্রকৃতির কারণে, যখন আর্থিক সংখ্যা প্রয়োগ যেমন বৃত্তাকারে জড়িত ক্রিয়াকলাপগুলিতে বা সমতা পরীক্ষার ক্ষেত্রে সঠিক সংখ্যাসূচক আচরণ প্রয়োজন হয় তখন এই ডেটা প্রকারগুলি ব্যবহার করবেন না। পরিবর্তে, পূর্ণসংখ্যা, দশমিক, অর্থ, বা স্মলমনি ডেটা ধরণের ব্যবহার করুন। যেখানে ক্লাউজ অনুসন্ধানের শর্তাদি, বিশেষত = এবং <> অপারেটরগুলিতে ভাসা বা আসল কলামগুলি ব্যবহার করা থেকে বিরত থাকুন। ভাসা এবং আসল কলামগুলি> বা <তুলনায় সীমাবদ্ধ করা ভাল।


দশমিকের (স্থির) সংখ্যাটি Scaleকলামে সুনির্দিষ্ট ।
সিস টিমারম্যান

1
যদি আপনি 'ঠিক যেমন নির্দিষ্টভাবে নির্দিষ্ট' চান তবে মানদণ্ডের দৃষ্টিকোণ থেকে কিছুটা সুবিধা রয়েছে numericযেহেতু এটি আপনার চেয়ে চেয়ে বেশি নির্ভুলতার সাথে কখনই সঞ্চয় করবে না: দেখুন স্ট্যাকওভারফ্লো.com
অ্যাড অ্যাভিস

13

একটি সম্পূর্ণ উত্তর নয়, তবে একটি দরকারী লিঙ্ক:

"আমি প্রায়শই দশমিক মানগুলির বিপরীতে গণনা করি some

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx


2
এটা বোঝা যায় না। উত্স সহ অন্যান্য সমস্ত উত্তর বলে যে সংখ্যাসূচক বা দশমিক তথ্য প্রকারগুলি নির্ভুল, এবং ভাসমান বা আসল প্রকারগুলি খুব নিকটবর্তী হয়। কম নির্ভুলতার কারণে, আমি বুঝতে পারি যে ভাসমান কাস্টিং দ্রুত গণনার অনুমতি দিতে পারে তবে উচ্চতর নির্ভুলতা নয়।
cbbad

3
সমস্ত সংখ্যার ডেটা টাইপ ওভারফ্লো এবং আন্ডারফ্লো অনুভব করতে পারে। ওভারফ্লো একটি স্পষ্ট ত্রুটি, তবে, আন্ডারফ্লো নিরব। জন্য underflow বৈশিষ্ট্য decimalএবং floatহয় বিভিন্ন । ডেসিমাল যথাযথতা বা স্কেল বাড়িয়ে যতটা সম্ভব জলতলের বিরুদ্ধে সংরক্ষণ করে। যাইহোক, আপনি দশমিক দশকে উল্লেখযোগ্য অঙ্কের সীমাটি আঘাত করার পরে, আন্ডারফ্লোগুলি নিরব থাকে (এবং নির্ভুলতা হারিয়ে যায়)। ফ্লোটের স্কেলগুলির বিস্তৃত বিস্তৃতি রয়েছে এবং এটি স্কেল সীমাবদ্ধতাগুলি যা প্রকৃতপক্ষে পাতালধারার কারণ। সুতরাং, ভাসমান আরও ভাল স্কেল থাকতে পারে। যাইহোক, এটি এখনও একটি অকার্যকর ধরণ is
এরিক

13

তারা ডেটা টাইপ অগ্রাধিকার মধ্যে পৃথক

দশমিক এবং সংখ্যাসূচক একই কার্যকরীভাবে রয়েছে তবে এখনও তথ্যের ধরণের অগ্রাধিকার রয়েছে যা কিছু ক্ষেত্রে গুরুত্বপূর্ণ।

SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')

ফলাফলের ডেটা টাইপ সংখ্যাগত কারণ এটি ডেটা টাইপের অগ্রাধিকার নেয় ।

প্রাধান্য অনুসারে ডাটা টাইপের ক্লান্তিকর তালিকা:

রেফারেন্স লিঙ্ক


7

দশমিকের একটি নির্দিষ্ট নির্ভুলতা থাকে তবে ভাসমানের পরিবর্তনশীল নির্ভুলতা থাকে।

সম্পাদনা (পুরো প্রশ্নটি পড়তে ব্যর্থ): ফ্ল্যাট (53) (ওরফে রিয়েল) হ'ল এসকিউএল সার্ভারে একটি ডাবল-স্পষ্টতা (32-বিট) ভাসমান পয়েন্ট নম্বর। নিয়মিত ফ্লোট একক নির্ভুলতা ভাসমান পয়েন্ট সংখ্যা number ডাবল হ'ল প্রচুর গণনার জন্য নির্ভুলতা এবং সরলতার একটি ভাল সংমিশ্রণ। দশমিকের সাথে আপনি 136-বিট অবধি একটি খুব উচ্চ নির্ভুলতার সংখ্যা তৈরি করতে পারেন - তবে আপনাকে অবশ্যই যত্নবান হতে হবে যে আপনি আপনার যথার্থতা এবং স্কেল সঠিকভাবে সংজ্ঞায়িত করতে পারেন যাতে এটিতে আপনার সমস্ত মধ্যবর্তী গণনাগুলি সংখ্যার প্রয়োজনীয় সংখ্যায় থাকতে পারে।


মামলাটি আর্থিক লেনদেনের ক্ষেত্রে কোনটি পছন্দনীয় তা আপনি নির্দিষ্ট করেন নি এবং কেন?
প্রিয়ঙ্কা.সরকার

এসকিউএল সার্ভার ২০০৮ এবং এর চেয়েও উচ্চতর জন্য, ফ্লোট (৫৩) ওরফে ফ্লোটটি একটি ডাবল-প্রিসিশন (-৪-বিট) ভাসমান পয়েন্ট সংখ্যা, যখন ফ্লোট (২৪) ওরফে রিয়েলটি একক নির্ভুলতা (32-বিট) ভাসমান পয়েন্ট সংখ্যা। ডকস.মাইক্রোসফট.ইন- ইউএস
এম ক্লোস্টার

4

ফ্লোট হ'ল আনুমানিক-সংখ্যার ডেটা টাইপ, যার অর্থ ডেটা টাইপ রেঞ্জের সমস্ত মান হুবহু উপস্থাপন করা যায় না।

দশমিক / সংখ্যাসূচকটি হ'ল ফিক্সড-প্রিসিশন ডেটা টাইপ, যার অর্থ ডেটা টাইপ রেঞ্জের সমস্ত মান যথাযথতা এবং স্কেল দিয়ে প্রতিনিধিত্ব করা যেতে পারে। অর্থ সাশ্রয়ের জন্য দশমিক ব্যবহার করতে পারেন।

দশমিক বা সংখ্যাসূচক থেকে ফ্লোটে রূপান্তর করা কিছুটা নির্ভুলতার ক্ষতি হতে পারে। দশমিক বা সংখ্যাসূচক তথ্য প্রকারের জন্য, এসকিউএল সার্ভার যথাযথতা এবং স্কেলের প্রতিটি নির্দিষ্ট সংমিশ্রণকে আলাদা ডেটা ধরণের হিসাবে বিবেচনা করে। ডেসিমাল (২,২) এবং ডেসিমাল (২,৪) বিভিন্ন ডেটা ধরণের। এর অর্থ 11.22 এবং 11.2222 বিভিন্ন ধরণের হলেও এটি ভাসার ক্ষেত্রে নয়। ফ্লাটের জন্য ()) ১১.২২ এবং ১১.২২২২ একই ডেটা ধরণের।

অর্থ সাশ্রয়ের জন্য আপনি মানি ডেটা টাইপও ব্যবহার করতে পারেন । এটি অর্থের জন্য 4 ডিজিটের নির্ভুলতার সাথে নেটিভ ডেটা টাইপ। বেশিরভাগ বিশেষজ্ঞরা অর্থ সাশ্রয়ের জন্য এই ডেটা ধরণের পছন্দ করেন।

রেফারেন্স 1 2 3


3

দশমিকের ক্ষেত্রে

এটি অন্তর্নিহিত প্রয়োজন কি?

এটি থেকে উদ্ভূত হয় যে, শেষ পর্যন্ত, কম্পিউটারগুলি বাইনারি ফর্ম্যাটে সংখ্যার অভ্যন্তরীণভাবে প্রতিনিধিত্ব করে। এটি অনিবার্যভাবে গোলাকার ত্রুটির দিকে পরিচালিত করে।

এই বিবেচনা:

0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")

উপরের উপবৃত্তের [...] অর্থ 'অসীম'। আপনি যদি এটি মনোযোগ সহকারে দেখেন তবে এখানে একটি অসীম পুনরাবৃত্তি প্যাটার্ন রয়েছে (= '0011')

সুতরাং, এক পর্যায়ে কম্পিউটারের যে মানটি গোল করতে হবে। এটি অনাবৃতভাবে সঞ্চিত সংখ্যার বারবার ব্যবহার থেকে প্রাপ্ত সংশ্লেষ ত্রুটির দিকে পরিচালিত করে।

বলুন যে আপনি আর্থিক পরিমাণ সঞ্চয় করতে চান (যা এমন সংখ্যার যেখানে একটি ভগ্নাংশের অংশ থাকতে পারে)। প্রথমত, আপনি স্পষ্টতই পূর্ণসংখ্যা ব্যবহার করতে পারবেন না (পূর্ণসংখ্যাগুলির একটি ভগ্নাংশের অংশ থাকে না)। বিশুদ্ধ গাণিতিক দৃষ্টিকোণ থেকে প্রাকৃতিক প্রবণতাটি ব্যবহার করা হবে float। কিন্তু, একটি কম্পিউটারে, ফ্লোটে এমন একটি সংখ্যার অংশ থাকে যা দশমিক বিন্দুর পরে অবস্থিত - "ম্যান্টিসা" - সীমাবদ্ধ। এটি গোলাকার ত্রুটি বাড়ে।

এটি থেকে উত্তরণের জন্য, কম্পিউটারগুলি নির্দিষ্ট ডেটাটাইপগুলি দেয় যা দশমিক সংখ্যার জন্য কম্পিউটারে বাইনারি গোল করার ত্রুটি সীমাবদ্ধ করে। এগুলি এমন ডেটা টাইপ যা আর্থিক পরিমাণের প্রতিনিধিত্ব করতে একেবারে ব্যবহার করা উচিত। এই ডেটা টাইপগুলি সাধারণত নামে যায় Decimal। উদাহরণস্বরূপ এটি সি # তে কেস। অথবা, DECIMALবেশিরভাগ ডাটাবেসে।


1

যদিও প্রশ্নটিতে অর্থের ধরণটি অন্তর্ভুক্ত করা হয়নি কিছু লোক এই থ্রেড জুড়ে আসছে আর্থিক গণনার জন্য অর্থের ডেটা টাইপ ব্যবহার করার জন্য প্রলুব্ধ হতে পারে।

অর্থ তথ্য প্রকার সম্পর্কে সতর্ক থাকুন, এটি সীমিত নির্ভুলতার।

এই স্ট্যাকওভারফ্লো প্রশ্নের উত্তরগুলিতে এটি সম্পর্কে অনেক ভাল তথ্য রয়েছে:

আপনার কি এসকিউএল সার্ভারে অর্থ বা ডেসিমাল (x, y) ডেটাটাইপ নির্বাচন করা উচিত?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.