Rumah pangkalan data tutorial mysql MySQL中与浮点比较有关问题的解决_MySQL

MySQL中与浮点比较有关问题的解决_MySQL

Jun 01, 2016 pm 01:55 PM
perpuluhan sebab

注意,下述部分主要与DOUBLE和FLOAT列相关,原因在于浮点数的不准确本质。MySQL使用64位十进制数值的精度执行DECIMAL操作,当处理DECIMAL列时,应能解决大多数常见的不准确问题。

浮点数有时会导致混淆,这是因为它们无法以准确值保存在计算机体系结构中。你在屏幕上所看到的值通常不是数值的准确值。对于FLOAT和DOUBLE列类型,情况就是如此。DECIMAL列能保存具有准确精度的值,这是因为它们是由字符串表示的。

在下面的示例中,介绍了使用DOUBLE时的问题:

mysql> CREATE TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);
mysql> INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),
-> (2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),
-> (2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),
-> (4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),
-> (5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),
-> (6, 0.00, 0.00), (6, -51.40, 0.00);
 
mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b
-> FROM t1 GROUP BY i HAVING a b;
 
+------+-------+------+
| i    | a     | b    |
+------+-------+------+
|    1 |  21.4 | 21.4 |
|    2 |  76.8 | 76.8 |
|    3 |   7.4 |  7.4 |
|    4 |  15.4 | 15.4 |
|    5 |   7.2 |  7.2 |
|    6 | -51.4 |    0 |
+------+-------+------+

结果是正确的。尽管前5个记录看上去不应能进行比较测试(a和b的值看上去没有什么不同),但它们能进行比较,这是因为显示的数值间的差异在十分位左右,具体情况取决于计算机的体系结构。

如果列d1和d2定义为DECIMAL而不是DOUBLE,SELECT查询的结果仅包含1行,即上面显示的最后1行。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah sebab mengapa penyiaran skrin gagal? 'Mesti dibaca untuk pemula: Bagaimana untuk menyelesaikan masalah sambungan penyiaran wayarles yang tidak berjaya' Apakah sebab mengapa penyiaran skrin gagal? 'Mesti dibaca untuk pemula: Bagaimana untuk menyelesaikan masalah sambungan penyiaran wayarles yang tidak berjaya' Feb 07, 2024 pm 05:03 PM

Apakah sebab mengapa penyiaran skrin gagal? 'Mesti dibaca untuk pemula: Bagaimana untuk menyelesaikan masalah sambungan penyiaran wayarles yang tidak berjaya'

Apakah yang menyebabkan Pejabat WPS tidak dapat memulakan kerja cetakan? Apakah yang menyebabkan Pejabat WPS tidak dapat memulakan kerja cetakan? Mar 20, 2024 am 09:52 AM

Apakah yang menyebabkan Pejabat WPS tidak dapat memulakan kerja cetakan?

Bagaimana untuk menukar rentetan perenambelasan kepada nombor dalam php Bagaimana untuk menukar rentetan perenambelasan kepada nombor dalam php Oct 26, 2021 pm 06:36 PM

Bagaimana untuk menukar rentetan perenambelasan kepada nombor dalam php

Panduan Komprehensif untuk Ralat PHP 500: Punca, Diagnosis dan Pembetulan Panduan Komprehensif untuk Ralat PHP 500: Punca, Diagnosis dan Pembetulan Mar 22, 2024 pm 12:45 PM

Panduan Komprehensif untuk Ralat PHP 500: Punca, Diagnosis dan Pembetulan

Mengapa telefon mudah alih Apple mengecas dengan perlahan? Mengapa telefon mudah alih Apple mengecas dengan perlahan? Mar 08, 2024 pm 06:28 PM

Mengapa telefon mudah alih Apple mengecas dengan perlahan?

Mendedahkan punca utama skrin biru win11 Mendedahkan punca utama skrin biru win11 Jan 04, 2024 pm 05:32 PM

Mendedahkan punca utama skrin biru win11

Mengapa win11 ditutup secara automatik? Mengapa win11 ditutup secara automatik? Jan 01, 2024 pm 11:39 PM

Mengapa win11 ditutup secara automatik?

Menyelesaikan masalah punca dan penyelesaian untuk kod status HTTP 550 Menyelesaikan masalah punca dan penyelesaian untuk kod status HTTP 550 Feb 20, 2024 am 09:49 AM

Menyelesaikan masalah punca dan penyelesaian untuk kod status HTTP 550

See all articles