2013-01-11 71 views
0


我有一个从csv文件向表提供值的场景。保留输入字符串格式化以解析为双倍

在那里,一些列具有双值。

捕获是双值可以是任何双格式,即 或81或81.0或8.1E1。

我只想在解析字符串为double后保留双格式。

例如 如果字符串是81.0然后格式图案应该是##。#和双解析的应该是81.0,而不是81或81.00
如果字符串是12.12然后格式图案应该是##。##与上述相同的。

在此先感谢。

+0

如果要保留该格式,请保留原始字符串。在一般情况下您可以使用特定于语言环境的格式,例如'1.234,00' –

回答

0

我认为Double.valueOf涵盖了你的用例。

此外,81.0 == 8181.00 == 81.081 == 81.00都会返回true,这意味着如果你解析81.00,将它保存在一个Java兼作81,也没有改变这一点。

+1

此外,如果您想保留模式以备后用,您可能需要查看一个正则表达式以将模式实例转换为原始模式。 –

0

如果你尝试转换doublestring,没有机会保存每个double值的格式值。

因为double值存储在二进制文件中。

跟在106.4000中的尾随小数零的想法在double的值中没有意义。

1

你需要你自己的价值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。对于像德语这样的语言,您在分析格式之前先替换小数点和分组分隔符。