如何在 Presto 中将数字格式化为小数点后 2 位的百分比?



我有一个数字想在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)

对于那些像我一样来到这里希望将decimaldouble字段四舍五入到小数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

相关内容

  • 没有找到相关文章

最新更新