【发布时间】:2018-12-29 20:02:01
【问题描述】:
简介
我制作了一个简单的程序,它以 .csv 文件格式存储数据,稍后读取以进行绘图。一切都用 Java 完成。
csv 文件中的数据示例如下:
2018/12/29
Tejido,321 908,13.55,43.18,$15.98,
Ropa,195 045,20.55,45.93,$123.01,
Gorra de visera,126 561,17.43,42.32,$79.54,
Cerveza,80 109,3.37,17.93,$12.38,
Mercancías de playa,75 065,11.48,39.73,$105.93,
Bebidas alcohólicas,31 215,4.84,27.90,$32.29,
Artículos de cuero,19 098,23.13,44.09,$198.74,
到目前为止我尝试了什么?
在阅读和研究文档后,我想出了这个非常适合我的问题的解决方案(如果它有效的话......)
public class CSVinput {
public static void main(String[] args) throws FileNotFoundException
{
Scanner scan = new Scanner(new File("produccion.csv"));
scan.useDelimiter(",");
while(scan.hasNext())
{
String date = scan.next();
System.out.println(date);
String name = scan.next();
System.out.println(name);
int quantity = Integer.parseInt(scan.next().replaceAll(" ", "."));
System.out.println(quantity);
double quality = Double.parseDouble(scan.next());
System.out.println(quality);
double realmQ = Double.parseDouble(scan.next());
System.out.println(realmQ);
double cost = Double.parseDouble(scan.nextLine());
System.out.println(cost);
if (scan.hasNextLine())
{
scan.nextLine();
System.out.println(date+"," + name+"," + quantity+"," + quality+"," + realmQ+"," + cost);
}
scan.close();
}
}
}
问题出在哪里?
问题是当我尝试导入字符串数据并将其转换为 double/float 时,它会向我抛出:
Exception in thread "main" java.lang.NumberFormatException: For input
string: "13.55"
我认为,如果我将其解析为 double 就足够了。
完全异常错误
Exception in thread "main" java.lang.NumberFormatException: For input string: "13.55"
at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at webscraper.CSVinput.main(CSVinput.java:29)
C:\Users\Jonathan\Desktop\WebScraper_03\WebScraper\nbproject\build-
impl.xml:1339: The following error occurred while executing this line:
C:\Users\Jonathan\Desktop\WebScraper_03\WebScraper\nbproject\build-
impl.xml:980: Java returned: 1
BUILD FAILED (total time: 1 second)
【问题讨论】:
-
如果你解析成双精度,你是对的。但是你正在解析成一个 int。
-
在处理 Money 时,
float和double是非常糟糕的选择,因为它们存在数字化错误:0.1在二进制中是一个无穷小部分 i> 无法使用固定数字二进制数存储在计算机中。 -
哪一行抛出异常?此外,语言环境可能是一个问题,因为我相信 Java 在执行该功能时会考虑到这一点。