2016-03-21 152 views
1

我想用動態浮點實現具有指定長度的不同輸入數據長度的格式以供顯示。例如x.xxxx, xx.xxxx, xxx.xx, xxxx.x帶浮點數的格式

換句話說,

如果我有1.4,我需要1.4000

如果13.4那麼我需要13.400,對於每個案件長度應該是5位數字(沒有點)。

我使用

DecimalFormat df2 = new DecimalFormat("000000"); 

,但不能建立一個正確的模式。有沒有解決方案? 感謝您的幫助。

+1

會發生什麼情況是數字超過5位數 - 比如123456789? – Mzf

+0

@Mzf將它切成5個字符的長度。 123456789 = 12345,123.45677 = 123.45 – Gorets

+2

所以爲什麼不把它轉換爲字符串,並採取前5個字符?如果它少,那麼在最後填零? – Mzf

回答

1

以下不是生產代碼。它沒有考慮到主導負數,也沒有考慮常數的非常高的值。但我相信你可以用它作爲出發點。感謝Mzf的靈感。

final static int noDigits = 5; 

public static String myFormat(double d) { 
    if (d < 0) { 
     throw new IllegalArgumentException("This does not work with a negative number " + d); 
    } 
    String asString = String.format(Locale.US, "%f", d); 
    int targetLength = noDigits; 
    int dotIx = asString.indexOf('.'); 
    if (dotIx >= 0 && dotIx < noDigits) { 
     // include dot in result 
     targetLength++; 
    } 
    if (asString.length() < targetLength) { // too short 
     return asString + "0000000000000000000000".substring(asString.length(), targetLength); 
    } else if (asString.length() > targetLength) { // too long 
     return asString.substring(0, targetLength); 
    } 
    // correct length 
    return asString; 
} 
+0

幹得好,像魅力一樣工作 – Gorets

+0

謝謝。 :-)我擔心雙精度表示中的不精確可能會導致意想不到的結果,比如1.4變成1.3999,但我還沒有找到任何例子。也許雙精度和%f格式的工作對於5位數是足夠好的。 –

+0

如果您使用浮點,它可能會發生 – Gorets