12.22 精确 math

MySQL 提供了对精确 math 的支持:数值处理可产生极其精确的结果,并对无效值进行高度控制。精度 math 基于以下两个功能:

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

  • 用于定点运算的 MySQL 库。

这些功能对数值运算有一些影响,并提供与标准 SQL 的高度一致性:

  • 精确计算 :对于精确值数字,计算不会引入浮点误差。而是使用精确的精度。例如,MySQL 将诸如.0001之类的数字视为一个精确值,而不是一个近似值,将其相加 10,000 次将产生一个准确的1的结果,而不是一个仅“接近”于 1 的值。

  • 明确定义的舍入行为 :对于精确值的数字,ROUND()的结果取决于其参数,而不取决于环境因素(例如基础 C 库的工作方式)。

  • 平台独立性 :在不同的平台(例如 Windows 和 Unix)上,精确数值的操作相同。

  • 控制对无效值的处理 :可以检测到溢出和零除,可以将其视为错误。例如,您可以将对于列而言太大的值视为错误,而不是将其值截断到列数据类型的范围之内。同样,您可以将零除视为错误,而不是产生结果NULL的运算。选择哪种方法由服务器 SQL 模式的设置决定。

以下讨论涵盖了精确 math 如何工作的几个方面,包括与较旧应用程序可能不兼容的情况。最后,给出了一些示例,这些示例演示了 MySQL 如何精确地处理数字运算。有关控制 SQL 模式的信息,请参见第 5.1.10 节“服务器 SQL 模式”