为什么 Julia 不能用 d 而不是 e 解析科学记数法中的函数?

Why can't Julia parse functions parse numbers in scientific notation with d instead of e?

提问人:Žarko Ivković 提问时间:10/31/2023 更新时间:11/9/2023 访问量:78

问:

我正在编写一个程序,我需要从文件中解析以科学记数法(如 0.00812216d0)编写的数字。事实证明,Julia parse(Type,str) 无法解析这些数字,因为 'd'。

如果我将“d”换成“e”,效果很好。但是,到处写替换函数是非常不切实际的。我不能只对整个文本文件执行此操作,因为它会导致一些不需要的更改。有什么解决办法吗?

字符串 解析 Julia 数字 科学记数法

评论

2赞 BallpointBen 10/31/2023
parse(Type, replace(str, 'd' => 'e')).为什么这不切实际?什么无处不在?重复工作应该进入一个函数。
1赞 Sundar R 11/1/2023
对于没有遇到过这种符号的人,请补充一下:根据维基百科,它代表“十度”,在主要语言中,Matlab 和 Fortran 是理解这种符号的语言:Matlab 对它们的态度相同,而 Fortran 将电子符号视为单精度,将 d 符号视为表示双精度。d
0赞 Stepan Zakharov 11/3/2023
有时,Parsers.jl 也无法解析具有指数 d 表示法的字符串。@BallpointBen的回答在我看来是可以的。

答:

0赞 Bill 11/9/2023 #1

尝试(如果你想要双精度,即 64 位浮点数):

dparse(s) = parse(Float64, replace(s, 'd' => 'e'))

正如 BallpontBen 在评论中所说。对于 BigFloat,将上面的 'Float64' 替换为 BigFloat。如果在数据解析过程中出现错误,请考虑

dparse(s) = something(tryparse(Float64, replace(s, 'd' => 's')), missing)

这将使您缺少解析错误,而不是抛出错误。