我有一个从csv文件为表提供值的方案。
在那里,有些列有双重值。
捕捉是双重值可以是任何双重格式,即 81或81.0或8.1E1。
我只想在解析字符串后保留双重格式。
示例
如果字符串是81.0,那么格式模式应该是##。#并且双解析应该是81.0而不是81或81.00
如果string是12.12,那么格式模式应该是##。##与上面相同。
提前致谢。
答案 0 :(得分:1)
你需要你自己的价值持有人类:
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 :(得分:0)
我认为Double.valueOf
涵盖了您的使用案例。
此外,81.0 == 81
和81.00 == 81.0
以及81 == 81.00
都会返回true,这意味着如果您解析81.00
,它将以{{1}的形式存储在Java双精度中,没有改变。
答案 2 :(得分:0)
如果您尝试将double
转换为string
,则无法保留每个double
值的格式值。
因为double
值存储在二进制中。
跟踪十进制零的想法,如106.4000,在double
值中没有意义。