মাইএসকিউএল: ভাসা এবং ডাবল মধ্যে পার্থক্য কি?


110

নতুন ডাটাবেস কাঠামোটি পরীক্ষা করে দেখলাম যে কেউ ফ্ল্যাট থেকে দ্বিগুণ হয়ে গেছে changed ভাবছি কেন, আমি মাইএসকিএল ডকুমেন্টেশন চেক করেছিলাম, তবে সততার সাথে পার্থক্য কী তা বুঝতে পারিনি।

কেউ কি ব্যাখ্যা করতে পারেন?



1
আমি যদি আপনি এই লিঙ্কটি বোঝানো: dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
অরুণ

এটি আরও সহায়ক হতে পারে: স্ট্যাকওভারফ্লো.com
জিজ্ঞাসা

প্রাসঙ্গিক: পয়েন্ট # 5 এ dev.mysql.com/doc/refman/5.0/en/no-matching-rows.html
রিনোগো

উত্তর:


106

তারা উভয়ই ভাসমান পয়েন্ট সংখ্যা উপস্থাপন করে। এ FLOATএকক নির্ভুলতার DOUBLEজন্য এবং অন্যটি দ্বিগুণ নির্ভুলতার সংখ্যার জন্য।

মাইএসকিউএল একক নির্ভুলতার মানগুলির জন্য চারটি বাইট এবং ডাবল-যথার্থ মানের জন্য আট বাইট ব্যবহার করে।

ভাসমান পয়েন্ট সংখ্যা এবং দশমিক (সংখ্যাসূচক) সংখ্যাগুলির মধ্যে একটি বড় পার্থক্য রয়েছে, যা আপনি DECIMALডেটা টাইপের সাহায্যে ব্যবহার করতে পারেন । এটি ভাসমান পয়েন্ট সংখ্যাগুলির বিপরীতে সঠিক সংখ্যক ডেটা মান সংরক্ষণ করতে ব্যবহৃত হয়, যেখানে সঠিক নির্ভুলতা সংরক্ষণ করা গুরুত্বপূর্ণ, উদাহরণস্বরূপ আর্থিক তথ্য সহ et


27
আপনি উদাহরণ সহ বিস্তারিত বলতে পারেন
কৈলাস

4
@ কৈলাস ফ্লোটগুলি বৃত্তাকার হয়ে যায় এবং দশমিক হয় না। দশমিক (9,3) উদাহরণটি উদাহরণস্বরূপ 123456.789 হতে পারে তবে আপনি 123456.789 সংরক্ষণ করার চেষ্টা করলে এটি একটি ফ্লোট হিসাবে 123456.0 হিসাবে প্রবেশ করানো হবে।
ব্লেক

76

সম্ভবত এই উদাহরণটি ব্যাখ্যা করতে পারে।

CREATE TABLE `test`(`fla` FLOAT,`flb` FLOAT,`dba` DOUBLE(10,2),`dbb` DOUBLE(10,2)); 

আমাদের মত একটি টেবিল আছে:

+-------+-------------+
| Field | Type        |
+-------+-------------+
| fla   | float       |
| flb   | float       |
| dba   | double(10,2)|
| dbb   | double(10,2)|
+-------+-------------+

প্রথম পার্থক্যের জন্য, আমরা প্রতিটি ক্ষেত্রে '1.2' দিয়ে একটি রেকর্ড সন্নিবেশ করার চেষ্টা করি :

INSERT INTO `test` values (1.2,1.2,1.2,1.2);

টেবিলটি এর মতো দেখাচ্ছে:

SELECT * FROM `test`;

+------+------+------+------+
| fla  | flb  | dba  | dbb  |
+------+------+------+------+
|  1.2 |  1.2 | 1.20 | 1.20 |
+------+------+------+------+

পার্থক্যটা দেখ?

আমরা পরবর্তী উদাহরণ চেষ্টা:

SELECT fla+flb, dba+dbb FROM `test`;

Hola! আমরা এই মত পার্থক্য খুঁজে পেতে পারি:

+--------------------+---------+
| fla+flb            | dba+dbb |
+--------------------+---------+
| 2.4000000953674316 |    2.40 |
+--------------------+---------+

1
আরও ভাল তুলনা হতে পারে ফ্লা এবং ফ্লাব 2 দশমিক পয়েন্ট হিসাবে দিতে। float(10, 2)
কৃতজ্ঞ

30

দ্বিগুণ হ'ল ভাসমানের মতো, এগুলি বাদে তারা দ্বিগুণ হয়ে থাকে। এটি বৃহত্তর নির্ভুলতার জন্য অনুমতি দেয়।


নোট করুন যে কিছু পয়েন্ট পরে ভাসা এবং দ্বিগুণ। উদাহরণস্বরূপ, 100000.1 একটি ভাসমান হিসাবে 100000 কে ছাঁটাই করে।
ব্লেক

14

চিন্তাধারা আমি আমার নিজের উদাহরণ সাহায্য করেছে আমাকে মান ব্যবহার পার্থক্য দেখতে যোগ চাই 1.3যখন যোগ করে অথবা অন্যের সঙ্গে গুন float, decimalএবং double

1.31.3বিভিন্ন ধরণের যুক্ত করুন ভাসা :

|float              | double | decimal |
+-------------------+------------+-----+
|2.5999999046325684 | 2.6    | 2.60000 |

1.31.3বিভিন্ন ধরণের দ্বারা ভাসা ভাসা :

| float              | double             | decimal      |
+--------------------+--------------------+--------------+
| 1.6899998760223411 | 1.6900000000000002 | 1.6900000000 |

এটি মাইএসকিউএল 6.7 ব্যবহার করছে using

প্রশ্ন:

SELECT 
    float_1 + float_2 as 'float add',
    double_1 + double_2 as 'double add',
    decimal_1 + decimal_2 as 'decimal add',

    float_1 * float_2 as 'float multiply',
    double_1 * double_2 as 'double multiply',
    decimal_1 * decimal_2 as 'decimal multiply'
FROM numerics

সারণী এবং সন্নিবেশ ডেটা তৈরি করুন:

CREATE TABLE `numerics` (
  `float_1` float DEFAULT NULL,
  `float_2` float DEFAULT NULL,
  `double_1` double DEFAULT NULL,
  `double_2` double DEFAULT NULL,
  `decimal_1` decimal(10,5) DEFAULT NULL,
  `decimal_2` decimal(10,5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `_numerics` 
    (
        `float_1`,
        `float_2`,
        `double_1`,
        `double_2`,
        `decimal_1`,
        `decimal_2`
    )
VALUES
    (
        1.3,
        1.3,
        1.3,
        1.3,
        1.30000,
        1.30000
    );

11

ফ্লোট আটটি স্থানের যথার্থতার সাথে ভাসমান পয়েন্ট সংখ্যা সঞ্চয় করে এবং চারটি বাইট রয়েছে যখন ডাবল 18 টি পর্যন্ত যথাযথতা সহ ভাসমান পয়েন্ট সংখ্যা সঞ্চয় করে এবং আটটি বাইট রয়েছে।


11

8 টি স্থানের নির্ভুলতার সাথে ফ্লোটের 32 বিট (4 বাইট) রয়েছে। ডাবল এর 16 বিট (8 বাইট) 16 স্থানের নির্ভুলতা সহ রয়েছে।

আপনার যদি আরও ভাল নির্ভুলতার প্রয়োজন হয় তবে ফ্লোটের পরিবর্তে ডাবল ব্যবহার করুন ।

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