我有一個從csv文件向表提供值的場景。保留輸入字符串格式化以解析爲雙倍
在那裏,一些列具有雙值。
捕獲是雙值可以是任何雙格式,即 或81或81.0或8.1E1。
我只想在解析字符串爲double後保留雙格式。
例如 如果字符串是81.0然後格式圖案應該是##。#和雙解析的應該是81.0,而不是81或81.00
如果字符串是12.12然後格式圖案應該是##。##與上述相同的。
在此先感謝。
我有一個從csv文件向表提供值的場景。保留輸入字符串格式化以解析爲雙倍
在那裏,一些列具有雙值。
捕獲是雙值可以是任何雙格式,即 或81或81.0或8.1E1。
我只想在解析字符串爲double後保留雙格式。
例如 如果字符串是81.0然後格式圖案應該是##。#和雙解析的應該是81.0,而不是81或81.00
如果字符串是12.12然後格式圖案應該是##。##與上述相同的。
在此先感謝。
我認爲Double.valueOf
涵蓋了你的用例。
此外,81.0 == 81
和81.00 == 81.0
和81 == 81.00
都會返回true,這意味着如果你解析81.00
,將它保存在一個Java兼作81
,也沒有改變這一點。
此外,如果您想保留模式以備後用,您可能需要查看一個正則表達式以將模式實例轉換爲原始模式。 –
如果你嘗試轉換double
到string
,沒有機會保存每個double
值的格式值。
因爲double
值存儲在二進制文件中。
跟在106.4000中的尾隨小數零的想法在double
的值中沒有意義。
你需要你自己的價值holder類是這樣的:
public class Value<Raw> {
private final Format format;
private Raw value;
private String display;
public Value(String display, Format format) {
this.format = format;
this.display = display;
value = format.parseObject(display);
}
public String getDisplay() {
return display;
}
public Raw getValue() {
return value;
}
public void setValue(Raw value) {
this.value = value;
display = format.format(value);
}
public void setDisplay(String display) {
this.display = display;
value = format.parseObject(display);
}
public int hashCode() {
return value == null ? 0 : value.hashCode();
}
public boolean equals(Object other) {
if (other == null || Value.class != other.getCLass()) {
return false;
}
Object otherValue = ((Value)other).value;
return value == null ? otherRaw == null : value.equals(otherValue);
}
public String toString() {
return display;
}
}
最後是確定的格式。取決於語言環境和文件格式,這有點棘手。對於DecimalFormat,您可以用#替換所有數字,並將前導#減少爲1。對於像德語這樣的語言,您在分析格式之前先替換小數點和分組分隔符。
如果要保留該格式,請保留原始字符串。在一般情況下您可以使用特定於語言環境的格式,例如'1.234,00' –