vir*_*u13 5 floating-point rust
如何从可能包含剩余字符的字符串中解析浮点数,并找出它的结尾,而不进行手动解析(例如parseFloat()在 JS 中)?
一个例子是字符串"2e-1!"。我想评估字符串中的下一个浮点,以便我可以将此字符串拆分为"2e-1"和"!"(例如,如果我想实现一个计算器。)如果不编写解析器来查看浮点结束的位置,我将如何做到这一点作为&str,然后使用.parse()?
我知道这意味着我可能必须解析非标准的东西,例如"3e+1+e3"to 3e+1( 30) 和"+e3". 这是有意的;我不知道格式化浮点数的所有方法,尤其是对 Rust 有效的方法parse::<f64>(),但无论如何我都想处理它们。
我该如何做到这一点,最好没有外部库?
正如评论中提到的,您需要实现自己的浮点解析器或使用外部库。标准库中的解析器在输入字符串\xe2\x80\x93 中遇到其他垃圾时总是会出错,它甚至不允许前导或尾随空格。
\n一个很好用的外部板条箱是nom。它配备了一个集成的浮点数解析器,可以满足您的要求。例子:
use nom::number::complete::double;\nlet parser = double::<_, ()>;\nassert_eq!(parser("2.0 abc"), Ok((" abc", 2.0)));\nlet result = parser("Nanananananana hey, Jude!").unwrap();\nassert_eq!(result.0, "ananananana hey, Jude!");\nassert!(result.1.is_nan());\nRun Code Online (Sandbox Code Playgroud)\n解析器期望浮点数位于字符串的开头。如果您想允许前导空格,可以先使用 删除它trim_start()。
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |