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

8
我想在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%?

3个回答

6

谢谢。我得到了相同的结果,但是使用了更复杂的方式。format('%s%%', format('%,.2f',0.18932 * 100)) - Jason Li
2
似乎“格式”函数在我的Presto中不可用。必须有另一种方法。 - Jonny

2

对于像我一样想要将 decimaldouble 字段向下舍入到 n 个小数位,但不关心 % 标记的人,有几种选择比马丁的答案更好。

如果要输出类型为 double 的结果,则可以使用 truncate(x,n) 函数完成此操作。但是,它要求 x 的类型为 decimal

select truncate( cast( 1.23456789 as decimal(10,2)) , 2); -> 1.23 <DOUBLE>

如果你觉得在这里使用truncate有点无用,因为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))


0

对我来说,使用format()round()结合起来的方法是有效的:

select format('%s%%',round(count(*) * 100.00 / sum(count(*)) over(), 2)) as percent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接