মধ্যে পার্থক্য কি কি numeric
, float
এবং decimal
datatypes এবং যা যা পরিস্থিতিতে ব্যবহার করা উচিত?
যে কোনও ধরণের আর্থিক লেনদেনের জন্য (যেমন বেতন ক্ষেত্রের জন্য), কোনটি পছন্দনীয় এবং কেন?
মধ্যে পার্থক্য কি কি numeric
, float
এবং decimal
datatypes এবং যা যা পরিস্থিতিতে ব্যবহার করা উচিত?
যে কোনও ধরণের আর্থিক লেনদেনের জন্য (যেমন বেতন ক্ষেত্রের জন্য), কোনটি পছন্দনীয় এবং কেন?
উত্তর:
দশমিক (38 অঙ্ক পর্যন্ত) প্রদত্ত নির্ভুলতা অপর্যাপ্ত হলেই ভাসা বা বাস্তব তথ্য প্রকারগুলি ব্যবহার করুন
আনুমানিক সংখ্যা সংক্রান্ত ডেটা প্রকারগুলি অনেক সংখ্যার জন্য নির্দিষ্ট করে দেওয়া সঠিক মানগুলি সঞ্চয় করে না ; তারা দোকান একটি অত্যন্ত ঘনিষ্ঠ মূল্যের পড়তা। ( TechNet )
যেখানে ক্লাউজ অনুসন্ধানের শর্তাদি, বিশেষত = এবং <> অপারেটর ( টেকনেট ) -এ ফ্ল্যাট বা আসল কলামগুলি ব্যবহার করা এড়িয়ে চলুন
সুতরাং সাধারণত যেহেতু দশমিকের দ্বারা প্রদত্ত নির্ভুলতা হ'ল [10E38 ~ 38 ডিজিট] যদি আপনার নম্বরটি এতে ফিট করতে পারে তবে ফ্লোটের ছোট স্টোরেজ স্পেস (এবং সম্ভবত গতি) গুরুত্বপূর্ণ না এবং অস্বাভাবিক আচরণগুলি এবং আনুমানিক সংখ্যার প্রকারের সমস্যাগুলি মোকাবেলা করা না হলে গ্রহণযোগ্য, সাধারণত দশমিক ব্যবহার করুন ।
আরও দরকারী তথ্য
মূল উত্স : এমসিটিএস স্ব-গতিযুক্ত প্রশিক্ষণ কিট (পরীক্ষা 70-433): মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০৮ ডাটাবেস ডেভলপমেন্ট - অধ্যায় 3 - টেবিল, ডেটা প্রকারসমূহ এবং ঘোষিত ডেটা ইন্টিগ্রিটি পাঠ 1 - ডেটা টাইপ (গাইডলাইন) নির্বাচন - পৃষ্ঠা 93
use the float or real data types only if the precision provided by decimal is insufficient
- আমি ভেবেছিলাম আসল হ'ল নির্ভুল তবে দশমিক, তাই দশমিক অপর্যাপ্ত হলে আপনি কীভাবে আসল ব্যবহার করতে লিখবেন?
decimal
করতে হয় তবে তা ঠিক হয়ে যাবে। এটি 20 এর যথার্থতা you যদি আপনাকে 1e20 এবং 1e-20 এর মধ্যে মানগুলি সংরক্ষণ decimal
করতে হয় তবে ভাল, এটি করতে পারবেন না । এটি নির্ভুলতার 40 ডিজিট। আপনি একই decimal
ক্ষেত্রে 1e20 এবং 1e-20 সঞ্চয় করতে পারবেন না । পরিবর্তে, আপনি ব্যবহার করতে পারেন float
, যা অভ্যন্তরীণভাবে সবকিছুকে বেস 2 এর লগ হিসাবে সঞ্চয় করে That এটি একটি ক্ষেত্রের মধ্যে পুরোপুরি যথাযথতাটি দেয় যে অসুবিধাটির সাথে কেবল প্রথম ~ 8 অঙ্কগুলি সঠিক হবে।
float
..." - বললেন কে? এটি কি একটি উক্তি বা আপনার মতামত?
এমএসডিএন থেকে নির্দেশিকা: দশমিক, ভাসমান এবং আসল ডেটা ব্যবহার করে
সংখ্যাসূচক এবং দশমিক তথ্য প্রকারের ডিফল্ট সর্বাধিক যথাযথতা 38 Trans দশমিকের সাথে সংখ্যা সংরক্ষণ করতে দশমিক তথ্য প্রকারটি ব্যবহার করুন যখন ডেটা মানগুলি নির্দিষ্ট হিসাবে সঞ্চিত রাখতে হবে।
ফ্লোট এবং রিয়েল এর আচরণ আনুমানিক সংখ্যার ডেটা টাইপগুলিতে আইইইই 754 নির্দিষ্টকরণ অনুসরণ করে follows ভাসমান এবং আসল ডেটা ধরণের আনুমানিক প্রকৃতির কারণে, যখন আর্থিক সংখ্যা প্রয়োগ যেমন বৃত্তাকারে জড়িত ক্রিয়াকলাপগুলিতে বা সমতা পরীক্ষার ক্ষেত্রে সঠিক সংখ্যাসূচক আচরণ প্রয়োজন হয় তখন এই ডেটা প্রকারগুলি ব্যবহার করবেন না। পরিবর্তে, পূর্ণসংখ্যা, দশমিক, অর্থ, বা স্মলমনি ডেটা ধরণের ব্যবহার করুন। যেখানে ক্লাউজ অনুসন্ধানের শর্তাদি, বিশেষত = এবং <> অপারেটরগুলিতে ভাসা বা আসল কলামগুলি ব্যবহার করা থেকে বিরত থাকুন। ভাসা এবং আসল কলামগুলি> বা <তুলনায় সীমাবদ্ধ করা ভাল।
Scale
কলামে সুনির্দিষ্ট ।
numeric
যেহেতু এটি আপনার চেয়ে চেয়ে বেশি নির্ভুলতার সাথে কখনই সঞ্চয় করবে না: দেখুন স্ট্যাকওভারফ্লো.com
একটি সম্পূর্ণ উত্তর নয়, তবে একটি দরকারী লিঙ্ক:
"আমি প্রায়শই দশমিক মানগুলির বিপরীতে গণনা করি some
decimal
এবং float
হয় বিভিন্ন । ডেসিমাল যথাযথতা বা স্কেল বাড়িয়ে যতটা সম্ভব জলতলের বিরুদ্ধে সংরক্ষণ করে। যাইহোক, আপনি দশমিক দশকে উল্লেখযোগ্য অঙ্কের সীমাটি আঘাত করার পরে, আন্ডারফ্লোগুলি নিরব থাকে (এবং নির্ভুলতা হারিয়ে যায়)। ফ্লোটের স্কেলগুলির বিস্তৃত বিস্তৃতি রয়েছে এবং এটি স্কেল সীমাবদ্ধতাগুলি যা প্রকৃতপক্ষে পাতালধারার কারণ। সুতরাং, ভাসমান আরও ভাল স্কেল থাকতে পারে। যাইহোক, এটি এখনও একটি অকার্যকর ধরণ is
দশমিক এবং সংখ্যাসূচক একই কার্যকরীভাবে রয়েছে তবে এখনও তথ্যের ধরণের অগ্রাধিকার রয়েছে যা কিছু ক্ষেত্রে গুরুত্বপূর্ণ।
SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')
ফলাফলের ডেটা টাইপ সংখ্যাগত কারণ এটি ডেটা টাইপের অগ্রাধিকার নেয় ।
প্রাধান্য অনুসারে ডাটা টাইপের ক্লান্তিকর তালিকা:
দশমিকের একটি নির্দিষ্ট নির্ভুলতা থাকে তবে ভাসমানের পরিবর্তনশীল নির্ভুলতা থাকে।
সম্পাদনা (পুরো প্রশ্নটি পড়তে ব্যর্থ): ফ্ল্যাট (53) (ওরফে রিয়েল) হ'ল এসকিউএল সার্ভারে একটি ডাবল-স্পষ্টতা (32-বিট) ভাসমান পয়েন্ট নম্বর। নিয়মিত ফ্লোট একক নির্ভুলতা ভাসমান পয়েন্ট সংখ্যা number ডাবল হ'ল প্রচুর গণনার জন্য নির্ভুলতা এবং সরলতার একটি ভাল সংমিশ্রণ। দশমিকের সাথে আপনি 136-বিট অবধি একটি খুব উচ্চ নির্ভুলতার সংখ্যা তৈরি করতে পারেন - তবে আপনাকে অবশ্যই যত্নবান হতে হবে যে আপনি আপনার যথার্থতা এবং স্কেল সঠিকভাবে সংজ্ঞায়িত করতে পারেন যাতে এটিতে আপনার সমস্ত মধ্যবর্তী গণনাগুলি সংখ্যার প্রয়োজনীয় সংখ্যায় থাকতে পারে।
ফ্লোট হ'ল আনুমানিক-সংখ্যার ডেটা টাইপ, যার অর্থ ডেটা টাইপ রেঞ্জের সমস্ত মান হুবহু উপস্থাপন করা যায় না।
দশমিক / সংখ্যাসূচকটি হ'ল ফিক্সড-প্রিসিশন ডেটা টাইপ, যার অর্থ ডেটা টাইপ রেঞ্জের সমস্ত মান যথাযথতা এবং স্কেল দিয়ে প্রতিনিধিত্ব করা যেতে পারে। অর্থ সাশ্রয়ের জন্য দশমিক ব্যবহার করতে পারেন।
দশমিক বা সংখ্যাসূচক থেকে ফ্লোটে রূপান্তর করা কিছুটা নির্ভুলতার ক্ষতি হতে পারে। দশমিক বা সংখ্যাসূচক তথ্য প্রকারের জন্য, এসকিউএল সার্ভার যথাযথতা এবং স্কেলের প্রতিটি নির্দিষ্ট সংমিশ্রণকে আলাদা ডেটা ধরণের হিসাবে বিবেচনা করে। ডেসিমাল (২,২) এবং ডেসিমাল (২,৪) বিভিন্ন ডেটা ধরণের। এর অর্থ 11.22 এবং 11.2222 বিভিন্ন ধরণের হলেও এটি ভাসার ক্ষেত্রে নয়। ফ্লাটের জন্য ()) ১১.২২ এবং ১১.২২২২ একই ডেটা ধরণের।
অর্থ সাশ্রয়ের জন্য আপনি মানি ডেটা টাইপও ব্যবহার করতে পারেন । এটি অর্থের জন্য 4 ডিজিটের নির্ভুলতার সাথে নেটিভ ডেটা টাইপ। বেশিরভাগ বিশেষজ্ঞরা অর্থ সাশ্রয়ের জন্য এই ডেটা ধরণের পছন্দ করেন।
এটি অন্তর্নিহিত প্রয়োজন কি?
এটি থেকে উদ্ভূত হয় যে, শেষ পর্যন্ত, কম্পিউটারগুলি বাইনারি ফর্ম্যাটে সংখ্যার অভ্যন্তরীণভাবে প্রতিনিধিত্ব করে। এটি অনিবার্যভাবে গোলাকার ত্রুটির দিকে পরিচালিত করে।
এই বিবেচনা:
0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")
উপরের উপবৃত্তের [...] অর্থ 'অসীম'। আপনি যদি এটি মনোযোগ সহকারে দেখেন তবে এখানে একটি অসীম পুনরাবৃত্তি প্যাটার্ন রয়েছে (= '0011')
সুতরাং, এক পর্যায়ে কম্পিউটারের যে মানটি গোল করতে হবে। এটি অনাবৃতভাবে সঞ্চিত সংখ্যার বারবার ব্যবহার থেকে প্রাপ্ত সংশ্লেষ ত্রুটির দিকে পরিচালিত করে।
বলুন যে আপনি আর্থিক পরিমাণ সঞ্চয় করতে চান (যা এমন সংখ্যার যেখানে একটি ভগ্নাংশের অংশ থাকতে পারে)। প্রথমত, আপনি স্পষ্টতই পূর্ণসংখ্যা ব্যবহার করতে পারবেন না (পূর্ণসংখ্যাগুলির একটি ভগ্নাংশের অংশ থাকে না)। বিশুদ্ধ গাণিতিক দৃষ্টিকোণ থেকে প্রাকৃতিক প্রবণতাটি ব্যবহার করা হবে float
। কিন্তু, একটি কম্পিউটারে, ফ্লোটে এমন একটি সংখ্যার অংশ থাকে যা দশমিক বিন্দুর পরে অবস্থিত - "ম্যান্টিসা" - সীমাবদ্ধ। এটি গোলাকার ত্রুটি বাড়ে।
এটি থেকে উত্তরণের জন্য, কম্পিউটারগুলি নির্দিষ্ট ডেটাটাইপগুলি দেয় যা দশমিক সংখ্যার জন্য কম্পিউটারে বাইনারি গোল করার ত্রুটি সীমাবদ্ধ করে। এগুলি এমন ডেটা টাইপ যা আর্থিক পরিমাণের প্রতিনিধিত্ব করতে একেবারে ব্যবহার করা উচিত। এই ডেটা টাইপগুলি সাধারণত নামে যায় Decimal
। উদাহরণস্বরূপ এটি সি # তে কেস। অথবা, DECIMAL
বেশিরভাগ ডাটাবেসে।
যদিও প্রশ্নটিতে অর্থের ধরণটি অন্তর্ভুক্ত করা হয়নি কিছু লোক এই থ্রেড জুড়ে আসছে আর্থিক গণনার জন্য অর্থের ডেটা টাইপ ব্যবহার করার জন্য প্রলুব্ধ হতে পারে।
অর্থ তথ্য প্রকার সম্পর্কে সতর্ক থাকুন, এটি সীমিত নির্ভুলতার।
এই স্ট্যাকওভারফ্লো প্রশ্নের উত্তরগুলিতে এটি সম্পর্কে অনেক ভাল তথ্য রয়েছে:
আপনার কি এসকিউএল সার্ভারে অর্থ বা ডেসিমাল (x, y) ডেটাটাইপ নির্বাচন করা উচিত?