oracle FM去掉了小数点后的0,怎么去掉小数点?

说实话,当我第一次看到这个FM9 9 9 9 0.0的时候,我有一段时间很困惑。
但一旦你弄清楚了,其实很简单。
可以看到to_char(ts,'FM9 9 9 9 0.0')用于格式化数字ts。
FM 两个字母是关键。
它们的作用是删除数字后面不必要的零。
例如,ts 为 1 .0。
如果使用此格式,结果将为“1 ”,不含零。
如果 ts 为 0.5 ,则结果为“0.5 ”,四舍五入到小数点后一位。
然后在末尾添加“天”以指示该数字有多长。

举两个栗子,你看得清楚吗:
ts为1 .0,执行该语句并返回“1 day”。

ts 为 0.5 执行该语句将返回“0.5 days”。

就是这样。
最主要的是 FM 确保最多保留一位小数,并且没有额外的零。
其他人只是简单地添加单位。

sql语句 怎么去掉小数点后多余的 0

哦,这个 SQL 查询看起来像是处理一个浮点数 2 5 5 5 ,7 8 4 ,然后根据条件返回不同的值。
首先,我们来谈谈结果。
该查询的结果是2 5 5 6 .0.0。

详细分析:

首先声明@s numeric(2 0,1 0),并声明一个名为@s、类型为numeric、长度为2 0、小数点后1 0位的变量。
这意味着该变量最多可以存储小数点后 1 0 位的数字。


set @s = 2 5 5 5 .7 8 4 000 将变量 @s 的值设置为 2 5 5 5 .7 8 4 000。


接下来选择case,这是一个条件判断,用来根据条件的不同返回不同的结果。


cast(@sasfloat) >cast(cast(@sasfloat) as INT) 这里的逻辑有点复杂。
首先,@sasfloat是一个变量名,但实际上@s只是直接在SQL中使用。
这里使用convert函数将浮点数转换为整数(即​​去除小数部分)。
但是,第一次转换将变量值转换为浮点数,第二次转换再次将浮点数转换为整数。


如果条件cast(@sasfloat) >cast(cast(@sasfloat) as INT)为真,则随后将返回cast(@sasfloat)。
如果此条件为 false,则在 else 之后返回强制转换 (cast(@sasfloat) as INT)。

但是,这里有一个错误。
@sasfloat 没有在查询中声明,它应该是@s。
正确的查询应该是:
sql 声明@s numeric(2 0,1 0) 设置@s = 2 5 5 5 .7 8 4 000 选择情况 if cast(@s as float) >cast(@s as int) then cast(@s as float) else cast(cast(@s as int) end
现在,如果运行此查询且 @s 为 2 5 5 5 .7 8 4 000,则条件cast(@s as float) >cast(@s as int) 将为 true,因为 2 5 5 5 .7 8 4 不是整数,因此查询将返回 2 5 5 5 .7 8 4 000。
但是,如果小数部分为 0,例如例如@s = 2 5 5 5 ,条件不成立,返回值为2 5 5 5 但是根据你的查询语句,结果是2 5 5 6 .0。
这可能是因为查询中存在逻辑错误,导致判断条件时将整数与浮点数的比较结果处理为整数加一。