如何在Scala中将数字格式化为百分比?
在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
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