【问题标题】:How to format a number as percentage with 2 decimal places in Presto?如何在 Presto 中将数字格式化为小数点后 2 位的百分比?
【发布时间】:2020-10-27 00:34:25
【问题描述】:

我有一个数字想在 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 decimal percentage presto trino


    【解决方案1】:

    format 函数接受任何 Java format string specifiers

    presto> select format('%.2f%%', 0.18932 * 100);
     _col0
    --------
     18.93%
    (1 row)
    

    【讨论】:

    • 谢谢。我得到了相同的结果,但方法更复杂。格式('%s%%', 格式('%,.2f',0.18932 * 100))
    • 似乎“我的”presto 中没有“格式”功能。必须有另一种方式
    【解决方案2】:

    对于像我一样来这里希望将 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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2011-09-15
      • 2019-07-09
      • 2023-03-16
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多