猿问

使用指数表示法解析复数 Java

尝试从 csv 文件读取一些复数。我有一个字符串并且正在尝试

ComplexFormat cf = new ComplexFormat();
cf.parse(entry)

此代码会导致以下错误

org.apache.commons.math3.exception.MathParseException: illegal state: string "-7.5212e-06+3.4298e-06i" unparseable (from position 7) as an object of type org.apache.commons.math3.complex.Complex

我假设我需要使用 NumberFormat 创建一个新的复杂格式,该格式允许指数表示法,因为

cf.getRealFormat().useExponentialNotation = false

但是我不确定如何创建这样的 NumberFormat。否则我正在考虑使用 Double.parseDouble 但这需要我考虑正确的正则表达式。


慕桂英3389331
浏览 82回答 1
1回答

缥缈止盈

您的数据似乎包含带小 e 的科学计数法。令人烦恼的是,该库不会拦截,但简单的替换会对您的情况有所帮助。String entry = "-7.5212e-06+3.4298e-06i";ComplexFormat cf = new ComplexFormat();Complex c = cf.parse(entry.replace('e', 'E'));System.out.println(c);//(-0.075212, 0.034298)但请注意,如果您使用默认构造函数(如上所述),您的数字将被正确解析,但科学记数法将不再保留。如果你想保留符号,请使用 DecimalFormat:DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);DecimalFormat formatter = new DecimalFormat("##.####E0", symbols);ComplexFormat cfWithE = new ComplexFormat(formatter);Complex c2 = cfWithE.parse(entry.replace('e', 'E'));System.out.println(c2);//(-7.5212E-6, 3.4298E-6)
随时随地看视频慕课网APP

相关分类

Java
我要回答