使用更改长度删除十进制值的尾随零

Chr*_*gan 24 mysql

我有一个程序,我正在显示赔率,但客户只想显示有效数字.因此,1.50将显示为"1.5",而1.00将显示为"1".

如何让MySQL不显示尾随零;

即在数据库中:

赔率
1.500
23.030
2.000
4.450

会显示为

1.5
23.03
2
4.45

谢谢你的帮助

Chr*_*wan 57

到目前为止最简单的方法,只需添加零!

例子:

SET 
    @yournumber1="1.500", 
    @yournumber2="23.030",
    @yournumber3="2.000",
    @yournumber4="4.450"
;

SELECT 
    (@yournumber1+0),
    (@yournumber2+0),
    (@yournumber3+0),
    (@yournumber4+0)
;

+------------------+------------------+------------------+------------------+
| (@yournumber1+0) | (@yournumber2+0) | (@yournumber3+0) | (@yournumber4+0) |
+------------------+------------------+------------------+------------------+
|              1.5 |            23.03 |                2 |             4.45 |
+------------------+------------------+------------------+------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

如果您的值来自的列是DECIMAL或NUMERIC类型,则首先将其强制转换为字符串以确保转换发生... ex:

SELECT (CAST(`column_name` AS CHAR)+0) FROM `table_name`;
Run Code Online (Sandbox Code Playgroud)

对于更短的方法,只需使用任何内置的字符串函数来执行转换:

SELECT TRIM(`column_name`)+0 FROM `table_name`;
Run Code Online (Sandbox Code Playgroud)

  • 这个`SELECT TRIM(\`column_name \`)+ 0 FROM \`table_name \`;`帮了我. (4认同)
  • 输出类型为double的事实实际上也会引起问题。79228162514264337593543950335.000变成7.922816251426434e28 (2认同)
  • 呵呵...好吧,它有点埋在无聊的部分:-P。 (2认同)

foo*_*ncy 43

编辑:我会用Christopher McGowan的答案代替 - 将值加0,这样更好.


如果进行修剪,检查实际上是否有小数点非常重要.

所以我想你想用:

SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE yourfield LIKE '%.%'
Run Code Online (Sandbox Code Playgroud)

  • 这个问题应该真正编辑,以便这是正确答案...... (4认同)
  • 例如,对于23.030,FLOOR()将返回23而不是23.03. (4认同)

Pod*_*.io 8

这对我有用..将字段围绕2位小数,然后修剪任何尾随零

所以2.10是2.1

SELECT trim(round(FIELDNAME,2))+0 
FROM tbl_name
....
Run Code Online (Sandbox Code Playgroud)

  • 这是有效的。`SELECT TRIM(ROUND(3/5,3))+0` 有效,`SELECT ROUND(3/5,3)+0` 无效。 (2认同)

Eug*_*ash 6

要从DECIMAL/NUMERIC或字符串类型列中删除尾随零,您可以简单地将值转换为DOUBLE,例如:

SELECT CAST(mycol AS DOUBLE) from mytable;
Run Code Online (Sandbox Code Playgroud)

或者

SELECT mycol + 0E0 FROM mytable;
Run Code Online (Sandbox Code Playgroud)

事实上,其他答案中提到的“转换为 char 并添加零”技巧具有相同的作用,但以更间接(并且可能效率较低)的方式,例如:

SELECT CAST(mycol AS CHAR)+0 FROM mytable; -- converts to string, then to number
SELECT TRIM(mycol)+0 FROM mytable; -- ditto
Run Code Online (Sandbox Code Playgroud)


Mar*_*c B -19

SELECT TRIM(TRAILING '0' FROM yourodds)
FROM ...
Run Code Online (Sandbox Code Playgroud)

TRIM 函数的文档。

  • 这不应该是公认的答案,因为它是错误的、可怕的和危险的。唯一正确的答案是 Christopher McGowan 的答案 (32认同)
  • 这是否意味着像“150”这样的数字会被破坏,变成 15? (12认同)
  • 它产生“3”。代表“3.0”,“3”代表“30”。 (9认同)