【问题标题】:MYSQL: function truncate(numeric,int) does not existMYSQL:函数 truncate(numeric,int) 不存在
【发布时间】:2024-05-23 09:15:01
【问题描述】:

我想对很长的数字进行四舍五入,ROUND() 函数在这里工作得很好,但数字的长度仍然相同。

我用过: ROUND(152.23456789123456789,1)

得到:152.20000000000000000

但想得到:152.2

我读到有 TRUNCATE() 函数可以“剪切”十进制数字,但这对我不起作用。我收到一条错误消息,指出该功能不存在或权限被拒绝。我正在使用 Vertica。 我尝试的功能是: TRUNCATE(152.23456789123456789,1)

我还读到向 round 函数添加第三个参数可能会有所帮助,但这对我也不起作用,再次因为该函数不存在: ROUND(152.23456789123456789,1,1)

你知道我还能做什么吗?

谢谢!

【问题讨论】:

  • 尾随的零与 value 无关,而与 data-type无关> 以及该数据类型如何在屏幕上显示为字符串。所以,我想到的问题是:1)。为什么152.20000000000000000不适合你,而在数学上 i> 等于152.2? 2). 您要截断/舍入的值的数据类型是什么? 3). 结果将在哪里使用/存储,该目的地期望什么数据类型? 4)。您是否尝试将结果转换为不同的数据类型?
  • 得到:152.20000000000000000 未复制。 dbfiddle.uk/…这可能是您的客户“服务”。

标签: mysql sql truncate


【解决方案1】:

ROUND() 影响列的,但不一定影响类型

如果要一位小数,则转换为小数:

CAST(152.23456789123456789 as DECIMAL(10, 1))

如果您从浮点类型开始,那么结果将是浮点 - 额外的零可能来自浮点类型(但是您正在查询数据)。

Here 是一个显示类型差异的示例。

【讨论】:

  • @Beginner 。 . .如果这回答了您的问题,您可以接受答案。