为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英3389331 2023-11-01 20:59:30
尝试从 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 但这需要我考虑正确的正则表达式。
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

您的数据似乎包含带小 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)


查看完整回答
反对 回复 2023-11-01
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信