## 12.25 精密数学

[12.25.1 数值类型](precision-math-numbers.html)
[12.25.2 DECIMAL 数据类型特征](precision-math-decimal-characteristics.html)
[12.25.3 表达式处理](precision-math-expressions.html)
[12.25.4 舍入行为](precision-math-rounding.html)
[12.25.5 精密数学示例](precision-math-examples.html)

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

MySQL 提供对精度数学的支持：数值处理导致极其准确的结果和对无效值的高度控制。精密数学基于以下两个特征：

-   SQL 模式控制服务器对接受或拒绝无效数据的严格程度。

-   用于定点算术的 MySQL 库。

    这些特性对数值运算有几个影响，并提供与标准 SQL 的高度合规性：

-   **精确计算**：对于精确值数字，计算不会引入浮点错误。相反，使用精确的精度。例如，MySQL 处理一个数字，例如`.0001`作为一个精确值而不是一个近似值，并将其相加 10,000 次会产生精确的结果`1`，而不是仅仅“接近”于 1 的值。

-   **定义明确的舍入行为**：对于精确值数字，结果[`圆形的（）`](mathematical-functions.html#function_round)取决于它的论点，而不是诸如底层 C 库如何工作的环境因素。

-   **平台独立性**: 对精确数值的操作在不同平台（如 Windows 和 Unix）上是相同的。

-   **控制无效值的处理**：溢出和除以零是可检测的，可以视为错误。例如，您可以将对于列来说太大的值视为错误，而不是将值截断以位于列的数据类型范围内。同样，您可以将除以零视为错误，而不是产生结果的操作`空值`.采用哪种方法的选择取决于服务器 SQL 模式的设置。

    以下讨论涵盖了精密数学如何工作的几个方面，包括可能与旧应用程序不兼容。最后，给出了一些例子来演示 MySQL 如何精确地处理数字操作。有关控制 SQL 模式的信息，请参阅[第 5.1.11 节，“服务器 SQL 模式”](sql-mode.html).
