gpt4 book ai didi

MySQL TRUNCATE(double, 4) 正在修改值而不是截断

转载 作者:可可西里 更新时间:2023-11-01 07:34:18 25 4
gpt4 key购买 nike

我试图截断带 4 位小数的 double ,但我将最后一位数字四舍五入( double 只有 4 位小数!)

双:-2.5805

SELECT TRUNCATE(double, 4) FROM `table`

结果:-2.5804

更有趣的是:

SELECT TRUNCATE(mycol, 4) AS col1, TRUNCATE(-2.5805, 4) AS col2
FROM mytable

返回:

col1    |  col2
--------+--------
-2.5804 | -2.5805

Demo here

最佳答案

double 数据类型是浮点类型,这意味着这些数字不会存储为精确数字。作为 floating point types 上的 MySQL 文档解释:

Because floating-point values are approximate and not stored as exact values, attempts to treat them as exact in comparisons may lead to problems. They are also subject to platform or implementation dependencies.

这意味着数字 -2.5805 在存储为 double 时不是精确数字。然而,truncate() 函数返回一个具有精确位数的精确数字。当-2.5805(作为double)展开时,小数点后第四位为4。

TRUNCATE(-2.5805, 4) 表达式返回 -2.5805 因为 MySQL 处理 numeric literals expressed with fixed number of decimal digits as decimal 数据类型,这是一种精确的数据类型。因此,truncate() 函数只是简单地返回相同的小数位数。

关于MySQL TRUNCATE(double, 4) 正在修改值而不是截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39616829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com