我有一个数字想在Presto中将其格式化为百分比。我想将 0.18932 格式化为 18.93%。
我试过了:
format('%s%%', decimal_number*100)
format('%s%%', round((a.decimal_number*100), 2))
结果如下: 未格式化:0.019435618 第一种方法:1.9435618000% 第二种方法:1.9400000000%
将其格式化为 1.94% 的任何更简单的方法
format
函数接受任何 Java 格式字符串说明符:
presto> select format('%.2f%%', 0.18932 * 100);
_col0
--------
18.93%
(1 row)
对于那些像我一样来到这里希望将decimal
或double
字段四舍五入到小数n
位但不关心%
符号的人来说,除了马丁的答案之外,你还有其他一些选择。
如果您希望输出类型为double
,那么truncate(x,n)
将执行此操作。但是,它要求x
类型为decimal
。
select truncate( cast( 1.23456789 as decimal(10,2)) , 2); -> 1.23 <DOUBLE>
如果你觉得截断在这里有点没用,因为decimal(10,2)
真的在做这项工作,那么你并不孤单。可以说是等效的转变。
select cast( cast( 1.23456789 as decimal(10,2)) as double); -> 1.23 <DOUBLE>
这在语法上是否比truncate()
更好或更高性能,我不知道,我想你可以选择。
如果你不大声疾呼转换会产生什么类型,那么我想下面是最直接的方法。
cast( 1.23456789 as decimal(10,2);
对我来说,它的工作原理是这样的,使用format()
和round()
组合:
select format('%s%%',round(count(*) * 100.00 / sum(count(*)) over(), 2)) as percent