2014-11-23 75 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