通过在Scala中传递小数位数作为参数来格式化数字

Posted

技术标签:

【中文标题】通过在Scala中传递小数位数作为参数来格式化数字【英文标题】:Formatting a number by passing number of decimal places as a parameter in Scala 【发布时间】:2017-04-26 15:41:06 【问题描述】:

(在 Scala 中)我一直在尝试创建一个函数,将 Double 转换为一定数量的小数点。如果我希望它返回一个 String 到小数点后 2 位,我会这样做:

    def roundBy2(num: Double): String = f"$num%1.2f"

但如果我想通过参数传递小数位数,我的第一次尝试可能是:

    def roundBy(num: Double)(dp: Int): String = f"$num%1.$dpf"

但这会引发:

“%1”中缺少转换运算符;使用 %% 表示文字 %,使用 %n 表示 newline def roundBy(num: Double)(dp: Int): String = f"$num%1.$dpf"

我知道在使用 interpolators 时我不必在引用引号内的值时使用花括号,但当然这只会留下f"$num%1.$dpf",我会误以为尝试使用尚未声明的值,即$dpf

我确信这是可以通过这种方式实现的,但我缺乏语法,所以我希望有一个简单的解决方法。谢谢

【问题讨论】:

【参考方案1】:

您可以改用.format(num)

def roundBy(num: Double)(dp: Int): String = s"%1.$dpf".format(num)

【讨论】:

谢谢 - Federico 就可以了。知道了就这么简单!

以上是关于通过在Scala中传递小数位数作为参数来格式化数字的主要内容,如果未能解决你的问题,请参考以下文章

怎么在vb中输出固定小数位数的数字?

15、pandas的设置数字格式,小数位数、百分号、千位分隔符

如何使用样式/模板格式化 wpf 中的小数位数?

MATLAB中保留小数点位数问题

Swift中数字中的小数位数

获取数字的小数部分和小数点后的位数(C#)