2014-11-23 76 views
1

我想写变量值的字符串格式化的方式的数量,根据以下内容:字符串格式化根据小数点

最大小数点为3 如果有小于3个显著百分点,比少写。

例如: 编号1.53848将写为1.538 编号1.0将写为1(而不是1.000)。

val variable1 = 1. 
val variable2 = 1.53848 
language = "%s average value is %.3f and %.3f".format(variable1, variable2) 
+0

四舍五入是不是一个问题。我不介意这个数字是否会被舍入。但我想1.5导致1,1,1导致1.204964导致1.204或1.205 – user3370773 2014-11-23 21:23:55

回答

2

这应该做的伎俩:

def format(d: Double) = 
    BigDecimal(d).scale match { 
     case x if x > 2 => "%.3f".format(d) 
     case _ => d.toInt.toString 
    } 
1

刚刚删除零(以及可能的逗号/分隔符)怎么样?

def formatted(d: Double) = "%.3f".format(d).replaceAll(",?0+$", "") 
+0

这工作很好,除了以下情况:当输入变量1 = 1.0时,我得到结果1.(我不想要的期限,我想得到1) – user3370773 2014-11-23 20:35:49

+0

对不起,瑞典的语言环境,你将不得不用正则表达式中的逗号(它将瑞典的分数)与\\替换。以便这段时间被删除。 – johanandren 2014-11-23 20:41:22

+0

我写道:def formatted(d:Double)=“%.3f”.format(d).replaceAll(“。?0 + $”,“”)。我得到以下(不需要的结果):变量1 = 1.2被格式化为1.,变量2 = 2.302684被格式化为2.303,变量3 = 1. – user3370773 2014-11-23 20:54:41