如何在Scala中将数字格式化为百分比?

如何在Scala中将数字格式化为百分比?,scala,Scala,在Scala中设置百分比格式的最简单/惯用方法是什么 我有以下解决方案,但我想知道是否存在更简洁的方法: val value = 0.1456 val s1 = f"the float value is ${value}%.2f" val s2= s"the percent value is ${java.text.NumberFormat.getPercentInstance.format(value)}" value: Double = 0.1456 s1: String = the

在Scala中设置百分比格式的最简单/惯用方法是什么

我有以下解决方案,但我想知道是否存在更简洁的方法:

val value = 0.1456

val s1 = f"the float value is ${value}%.2f" 
val s2= s"the percent value is ${java.text.NumberFormat.getPercentInstance.format(value)}"

value: Double = 0.1456

s1: String = the float value is 0.15
s2: String = the percent value is 15%
您可以使用“pimp my library”模式将
asPercentage
方法添加到Doubles

implicit class DoubleAsPercentage(d: Double) {
  def asPercentage = NumberFormat.getPercentInstance.format(d)
}

val s2 = s"the percent value is ${value.asPercentage}"

如果您正在寻找更简洁的方法,那么下面的代码将与您最初的想法一起使用。添加十进制位置也很容易,无需借助隐式功能。显然,这些都需要大量使用,更好的解决方案是使用隐式方法

val value = 0.1456
val s2 = val s2 = f"the percent value is ${value*100}%.0f%%"

s2: String = the percent value is 15%
我还想说几句其他的话(这里不表示四舍五入):

添加小数位的示例:

val s4 = f"the percent value is ${value2*100}%.1f%%"
s4: String = the percent value is 14.2%

可以使用f字符串将百分比设置为所需的相关小数位数。在本例中,它有4个小数位,但是如果您只想返回两个小数位,请在下面的字符串中使用.2f。 返回3位小数位,然后使用.3f等。但是,如果您想要的小数位比建议的多;“这里是4”,您将以尾随的零结束

val percentage = 51.9938

scala> f"I scored $percentage%.8f%% in my exams"

res164: String = I scored 51.99380000% in my exams

scala> f"I scored $percentage%.2f%% in my exams"

res165: String = I scored 51.99% in my exams

或者你可以只做
Math.floor(value*100)。toString+“%”
我认为DoubleAsPercentage可以而且应该声明为AnyVal(value类),以避免在每次asPercentage调用中创建新实例。
val percentage = 51.9938

scala> f"I scored $percentage%.8f%% in my exams"

res164: String = I scored 51.99380000% in my exams

scala> f"I scored $percentage%.2f%% in my exams"

res165: String = I scored 51.99% in my exams