কখন ভাসমান বনাম দশমিক ব্যবহার করবেন


14

আমি এই এপিআইটি তৈরি করছি, এবং ডাটাবেসগুলি এমন মানগুলি সংরক্ষণ করবে যা নিম্নলিখিতগুলির মধ্যে একটির প্রতিনিধিত্ব করে:

  • শতকরা হার
  • গড়
  • হার

0 এবং 100% সংখ্যার মধ্যে পরিসীমা এমন কোনও উপস্থাপনা করবেন কীভাবে আমার সত্যতার কোনও ধারণা নেই। এটা হওয়া উচিত

  • 0.00 - 1.00
  • 0.00 - 100.00
  • অন্য কোন বিকল্প যা আমি জানি না

তার জন্য কি একটি পরিষ্কার পছন্দ আছে? ডাটাবেসে এমন কিছু উপস্থাপনের বিশ্বব্যাপী উপায় যা 0 থেকে 100% শতাংশে যায়? আরও যাচ্ছি, এর জন্য সঠিক ধরণটি কী, ভাসা বা দশমিক?

ধন্যবাদ.



5
নম্বরগুলি বিভিন্ন উপায়ে সংরক্ষণ করা যেতে পারে। শতকরা 0-100 ব্যবহার করে বা 0-1 ব্যবহার করে স্টোর করে অন্তর্ভুক্ত কোনও ভুল নেই। সংখ্যার সাথে আপনার কী করা দরকার, আপনার সঠিকতা কী দরকার এবং কী তা গুরুত্বপূর্ণ। ভাল উত্তর দেওয়ার আগে আপনাকে আরও প্রসঙ্গটি ব্যাখ্যা করতে হবে। আপনার কি এমন সংখ্যা সংরক্ষণ করতে হবে যা অল্প সংখ্যক দশমিক সংখ্যার সাথে হুবহু উপস্থাপনযোগ্য? আপনি যদি গড়গুলি গড় করেন তবে আপনি তৃতীয়াংশ বা সতের ভাগের মতো ভগ্নাংশ পান। আপনার কি ঠিক সেগুলি সঞ্চয় করা দরকার? নাকি ঠিক প্রায়? আনুমানিক কত? আপনি তাদের সাথে কি করবেন?
এরিক পোস্টপিসিল

1
মানগুলি যদি 0.01 এর ধাপে 0.00 থেকে 100.00 হয় তবে এটি 10001 বিভিন্ন মান। কেবলমাত্র শততমint প্রতিনিধিত্ব করতে অথবা পারমিরিয়াড বা units এর ইউনিটগুলিতে একটি ব্যবহার করুন ‱
chux - মনিকা

@ chux-ReinstateMonica - হ্যাঁ, "ছোট ছোট পূর্ণসংখ্যা" সম্ভব, তবে আনাড়ি।
রিক জেমস

@ রিক জেমস সম্ভবত ছোট আকারের পূর্ণসংখ্যাগুলি খুঁজে পেলাম না।
chux -

উত্তর:


4

আমি বিপরীত অবস্থান গ্রহণ করব।

FLOATআনুমানিক সংখ্যার জন্য, যেমন শতাংশ, গড় ইত্যাদির জন্য। আপনি অ্যাপ্লিকেশন কোডে বা FORMAT()মাইএসকিউএল এর ফাংশন ব্যবহার করে মানগুলি প্রদর্শিত করার জন্য আপনাকে ফর্ম্যাট করা উচিত ।

কখনও পরীক্ষা করবেন না float_value = 1.3; এটি ব্যর্থ হওয়ার অনেক কারণ রয়েছে।

DECIMALআর্থিক মানগুলির জন্য ব্যবহার করা উচিত। DECIMALযখন কোনও মানটি ডলার / সেন্ট / ইউরো / ইত্যাদিতে গোল করতে হয় তখন দ্বিতীয় রাউন্ডিং এড়ানো হয়। হিসাবরক্ষকরা সেন্টের ভগ্নাংশ পছন্দ করেন না।

মাইএসকিউএল এর বাস্তবায়ন DECIMAL65 টি উল্লেখযোগ্য অঙ্কের অনুমতি দেয়; FLOATপ্রায় 7 এবং DOUBLEপ্রায় 16 দেয় 7 সাধারণত সেন্সর এবং বৈজ্ঞানিক গণনার জন্য পর্যাপ্ত পরিমাণের চেয়ে বেশি।

হিসাবে "শতাংশ" - কখনও কখনও আমি ব্যবহার করেছি TINYINT UNSIGNEDযখন আমি কেবল 1 বাইট স্টোরেজ গ্রহণ করতে চাই এবং খুব বেশি নির্ভুলতার প্রয়োজন হয় না; কখনও কখনও আমি ব্যবহার করেছি FLOAT(4 বাইট)। শতাংশের জন্য কোনও ডেটাটাইপ বিশেষভাবে সুর করা নেই। (এছাড়াও নোট করুন, DECIMAL(2,0)এটি মানটি ধরে রাখতে পারে না 100, সুতরাং প্রযুক্তিগতভাবে আপনার প্রয়োজন হবে DECIMAL(3,0)))

বা কখনও কখনও আমি FLOAT0 এবং 1 এর মধ্যে একটি মান ধারণ করে এমন একটি ব্যবহার করেছি তবে তবে "শতাংশ" প্রদর্শন করার আগে আমাকে 100 দ্বারা গুণ করা নিশ্চিত করতে হবে।

অধিক

"শতাংশ, গড়, হার" এর তিনটিই ভাসমানের মতো গন্ধ পান, যাতে এটি আমার প্রথম পছন্দ হবে।

ডেটাটাইপ সিদ্ধান্ত নেওয়ার জন্য একটি মানদণ্ড ... মানটির কয়টি অনুলিপি থাকবে?

যদি আপনার শতকরা এক ভাগের জন্য একটি কলামের সাথে একটি বিলিয়ন-সারির টেবিল থাকে, তবে এটি বিবেচনা করুন যে TINYINT1 বাইট (1 জিবি মোট) FLOATলাগবে , তবে 4 বাইট (মোট 4 জিবি) লাগবে। ওও, বেশিরভাগ অ্যাপ্লিকেশনগুলিতে এমন অনেকগুলি সারি নেই, সুতরাং এটি প্রাসঙ্গিক নাও হতে পারে।

একটি 'সাধারণ' নিয়ম হিসাবে, "সঠিক" মানগুলির কিছু ফর্ম INTবা ব্যবহার করা উচিত DECIMAL। অবাস্তব জিনিস (বৈজ্ঞানিক গণনা, বর্গক্ষেত্র, বিভাগ, ইত্যাদি) ব্যবহার করা উচিত FLOAT(বা DOUBLE)।

তদতিরিক্ত, আউটপুট বিন্যাস সাধারণত অ্যাপ্লিকেশন সামনের প্রান্তে ছেড়ে যাওয়া উচিত। এটি, যদিও কোনও "গড়" "14.6666666 ..." তে গণনা করতে পারে, ডিসপ্লেতে "14.7" এর মতো কিছু দেখাতে হবে; এটি মানুষের জন্য বন্ধুত্বপূর্ণ। এদিকে, আপনার পরে সিদ্ধান্ত নেওয়ার অন্তর্নিহিত মান রয়েছে যে "15" বা "14.667" পছন্দসই আউটপুট বিন্যাস ting

"0.00 - 100.00" পরিসীমাটি পূর্বে নির্ধারণের সাথে FLOAT আউটপুট ফর্ম্যাটিং বা DECIMAL(5,2)(3 বাইট) ব্যবহার করে করা যেতে পারে যা আপনি সর্বদা নির্দেশিত নির্ভুলতা চান


3

আমি সাধারণত ব্যবহারের বিরুদ্ধে সুপারিশ করব float । ভাসমান পয়েন্ট সংখ্যাগুলি বেস -২ এ সংখ্যার প্রতিনিধিত্ব করে, যার ফলে কিছু (সঠিক) সংখ্যাগুলি অপারেশন বা তুলনায় রাউন্ড-আপ হওয়ার কারণ হয়, কারণ এগুলি কেবল বেস -২ এ সঠিকভাবে সংরক্ষণ করা যায় না। এটি আশ্চর্যজনক আচরণ হতে পারে।

নিম্নলিখিত উদাহরণ বিবেচনা করুন :

create table t (num float);
insert into t values(1.3);

select * from t;

| num |
| --: |
| 1.3 |

select * from t where num = 1.3;

| num |
| --: |

বেস -২ সংখ্যার তুলনা 1.3 ব্যর্থ। এটা কৌতুকপূর্ণ।

তুলনায়, দশমিক তাদের পরিসীমা মধ্যে সীমাবদ্ধ সংখ্যার একটি সঠিক প্রতিনিধিত্ব প্রদান। আপনি পরিবর্তন করেন তাহলে floatথেকে decimal(2, 1)উপরের উদাহরণে, আপনার প্রত্যাশিত ফলাফল পেতে না।


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

4
নির্ভুলতার সাথে ইস্যুগুলি "ভাসমান পয়েন্ট সংখ্যাগুলি" এর কারণে নয় কেবল কেবল সাংখ্যিক উপস্থাপনার কারণে: সমস্ত সীমাবদ্ধ সংখ্যার উপস্থাপনের সীমিত নির্ভুলতা থাকে: ভাসমান-পয়েন্ট, স্থির-পয়েন্ট, পূর্ণসংখ্য, যুক্তিযুক্ত, দশমিক, বাইনারি, সবকিছু।
এরিক পোস্টপিসিল

2
দীর্ঘশ্বাস. আপনি কি স্থির করেছেন? আমার মন্তব্য বলেছে উত্তরটি ভুল কারণ এটি বলে যে দশমিকটি তার পরিসীমাটির মধ্যে সংখ্যার সঠিক প্রতিনিধিত্ব করে, তবে বাস্তবে এটি এটি কারণ নয় যে এটি ⅓ এর সঠিক প্রতিনিধিত্ব করে না ⅓ পরিবর্তনটি "নির্ভুল" এর পরিবর্তে "নির্ভুল" বলে, তবে কেন বাইনারি ফ্লোটিং পয়েন্টটি ঠিক তত ভাল নয় good উভয়ই সঠিক নয় ⅓ এবং উভয় বা উভয়ই সঠিক নয়, নির্ভর করে আপনার প্রান্তিকের সঠিক জন্য কত এবং কতটা নির্ভুলতা তাদের আছে. প্রশ্নটি সূচিত করে গড়ে গড় উপস্থাপন করা হবে এবং তিনটি জিনিস গড়ে গড়ে numbers এর মতো সংখ্যা দেয় ⅓
এরিক পোস্টপিসিল

4
মন্তব্যটি বলে যে রাউন্ড-টু-নিকটতম-সম্পর্কগুলি-এমনকি-সর্বাধিক ব্যবহৃত হয়, তবে উত্তর এখনও রাউন্ড-আপ বলে। উত্তরটি বলে যে তুলনাগুলি বৃত্তাকার হতে পারে তবে তুলনাটি নিখুঁত: তুলনাগুলি সর্বদা একটি গাণিতিকভাবে সঠিক ফলাফল দেয়, কোনও গোল না করে। (কিছু প্রোগ্রামিং ভাষাগুলি তুলনার আগে অপারেশনগুলিকে রূপান্তর করতে পারে তবে সেগুলি পৃথক অপারেশন))
এরিক পোস্টপিসিল

1
বাইনারি বা দশমিক উভয় ক্ষেত্রে 1/3 হুবহু উপস্থাপন করা যায় না। 14.99 ডলার ছাড়িয়ে 20% ছাড়ের ক্ষেত্রে গোলাকার ভগ্নাংশ সেন্টের অস্তিত্ব নেই।
রিক জেমস

0

ভাসমান এবং দশমিকের মধ্যে পার্থক্য হ'ল নির্ভুলতা। দশমিক দশমিক দশমিক দশমিক বিন্যাসের নির্ভুলতার মধ্যে যে কোনও সংখ্যার নির্ভুলভাবে প্রতিনিধিত্ব করতে পারে, যদিও ফ্লোট, সমস্ত সংখ্যার সঠিকভাবে প্রতিনিধিত্ব করতে পারে না।

উদাহরণস্বরূপ আর্থিক সম্পর্কিত মানের জন্য দশমিক ব্যবহার করুন এবং গ্রাফিকাল সম্পর্কিত মানের জন্য ফ্লোট ব্যবহার করুন


0

decimal(5,2)আপনি যদি এটি ঠিক একইভাবে সংরক্ষণ করতে চান তবে এটি ব্যবহার করার পরামর্শ দিচ্ছি কারণ decimalএটি যথাযথ নির্ভুলতা সংরক্ষণের জন্য। ( Https://dev.mysql.com/doc/refman/8.0/en/fixed-Point-tyype.html দেখুন )

যেহেতু ভাসমান-পয়েন্টের মানগুলি আনুমানিক এবং যথাযথ মান হিসাবে সংরক্ষণ করা হয় না, সেগুলি তুলনার ক্ষেত্রে যথাযথ হিসাবে বিবেচনা করার প্রচেষ্টা সমস্যার কারণ হতে পারে। তারা প্ল্যাটফর্ম বা বাস্তবায়ন নির্ভরতা সাপেক্ষে।

( https://dev.mysql.com/doc/refman/8.0/en/floating-Point-tyype.html )

এসকিউএল স্টেটমেন্টে লিখিত হিসাবে একটি ভাসমান-পয়েন্ট মান অভ্যন্তরীণভাবে উপস্থাপিত মানের মতো নাও হতে পারে।

ডেসিমাল কলামগুলির জন্য, মাইএসকিউএল dec৫ দশমিক অঙ্কের যথার্থতার সাথে অপারেশন সম্পাদন করে, যা সর্বাধিক সাধারণ ভুলত্রুটি সমস্যার সমাধান করা উচিত।

https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html


0

দশমিক: আর্থিক অ্যাপ্লিকেশনগুলির ক্ষেত্রে দশমিক প্রকারগুলি ব্যবহার করা আরও ভাল কারণ এটি আপনাকে উচ্চ স্তরের নির্ভুলতা দেয় এবং গোলাকার ত্রুটিগুলি এড়াতে সহজ দেয়

ডাবল: ডাবল প্রকারগুলি হ্যান্ডলিং অর্থ ব্যতীত আসল মানগুলির জন্য সম্ভবত সবচেয়ে বেশি ব্যবহৃত ডেটা টাইপ।

ভাসা: এটি বেশিরভাগ গ্রাফিক লাইব্রেরিতে ব্যবহৃত হয় কারণ প্রক্রিয়াকরণ ক্ষমতাগুলির জন্য খুব বেশি চাহিদা, এমন পরিস্থিতিও ব্যবহৃত হয় যা বৃত্তাকার ত্রুটি সহ্য করতে পারে।

তথ্যসূত্র: http://net-informations.com/q/faq/float.html


0
mysql> create table numbers (a decimal(10,2), b float);
mysql> insert into numbers values (100, 100);
mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G

*********************************************************************

@a := (a/3): 33.333333333
@b := (b/3): 33.333333333333
@a + @a + @a: 99.999999999000000000000000000000
@b + @b + @b: 100

দশমিক এই ক্ষেত্রে কী করা উচিত ঠিক তা করেছিল, এটি বাকী অংশ কেটে ফেলেছে, এভাবে 1/3 অংশ হারাবে।

সুতরাং অঙ্কের ক্ষেত্রে, দশমিকটি আরও ভাল তবে বিভাগগুলির জন্য, অবশ্যই অবশ্যই কিছুটা অবধি অবশ্যই ভাল better মানে, ডেসিমাল ব্যবহার করা আপনাকে কোনও উপায়ে "ফেল-প্রুফ পাটিগণিত" দেবে না।

আমি আশা করি এটি সাহায্য করবে


0

Tsql এ: ফ্লোট, ০.০ হিসাবে স্টোর এবং এটি দশমিক পয়েন্টের অঙ্কের পরে সংজ্ঞা দিতে হবে না, যেমন আপনাকে ফ্লোট (৪,২) লিখতে হবে না। দশমিক, 0.0 0.0 হিসাবে স্টোর এবং এটি দশমিক (4,2) এর মতো সংজ্ঞায়িত করার বিকল্প রয়েছে, আমি 0.00-1.00 টি সুপারিশ করব, এটি করে আপনি 100 এর গুণফল ছাড়াই সেই শতাংশের মান গণনা করতে পারেন, এবং যদি আপনি রিপোর্ট করেন তবে ডেটা টাইপ সেট করুন এমএস এক্সেল এবং অন্যান্য প্ল্যাটফর্ম ভিউ হিসাবে শতাংশ হিসাবে কলাম 0.5 -> 50%

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