我正在阅读一些 .csv 文件,其中包含表示十进制数的字符串。我的麻烦是,很多时候我接收使用不同区域设置的文件写入。例如:
- file1.csv 的价格列值为 129,13(, 为小数分隔符)
- file1.csv 的价格列值为 129.13(. 为小数分隔符)
现在我尝试以这种方式读取值:
DecimalFormatSymbols dfs = new DecimalFormatSymbols(new Locale(en,US));
DecimalFormat df= new DecimalFormat();
df.setDecimalFormatSymbols(dfs);
df.setParseBigDecimal(true);
bigDecimal = (BigDecimal) df.parse(value);
使用此片段代码,第一个值变为 12913(不正确),而第二个值变为 129.13(正确)。现在我希望如果我使用 en_US local 并且文件包含使用 的值(例如小数点分隔符),我必须抛出异常。
我该怎么做?
最佳答案
虽然在使用 DecimalFormatSymbols
时无法为组分隔符设置任何内容(null)(因为它是一个char
),但您可以将其设置为在有效数字中找不到的非常不寻常的内容,例如“@”。
DecimalFormatSymbols dfs = new DecimalFormatSymbols(new Locale(en,US));
dfs.setGroupingSeparator('@');
DecimalFormat df= new DecimalFormat();
df.setDecimalFormatSymbols(dfs);
df.setParseBigDecimal(true);
bigDecimal = (BigDecimal) df.parse(value);
关于java - 验证十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30868047/