"42.1"과 같은 8 진수 문자열을 가져 와서 부동 소수점을 가져와야합니다 (34.125). Rust에서 이것을하는 가장 좋은 방법은 무엇입니까? 나는 there previously was a from_str_radix function, but it's now removed을 본다.녹에서 float로 8 진수 문자열을 구문 분석하는 방법은 무엇입니까?
답변
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ParseFloatError {
_private:(),
}
impl ParseFloatError {
fn new() -> ParseFloatError {
ParseFloatError { _private:() }
}
}
impl fmt::Display for ParseFloatError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Could not parse float")
}
}
pub fn parse_float_radix(s: &str, radix: u32) -> Result<f64, ParseFloatError> {
let s2 = s.replace(".", "");
let i = i64::from_str_radix(&s2, radix).map_err(|_| ParseFloatError::new())?;
let count = s.split('.').count();
let fraction_len: usize;
match count {
0 => unreachable!(),
1 => fraction_len = 0,
2 => fraction_len = s.split('.').last().unwrap().len(),
_ => return Err(ParseFloatError::new()),
}
let f = (i as f64)/f64::from(radix).powi(fraction_len as i32);
Ok(f)
}
fn main() {
println!("{}", parse_float_radix("42.1", 8).unwrap());
}
먼저 입력을 정수로 구문 분석 한 다음 radix^number_of_fractional_digits로 나눕니다.
과학 표기법이나 무한대 또는 NaN과 같은 특수 값을 지원하지 않습니다. 또한 중간 정수가 오버플로되면 실패합니다.
나는 이것을 상자에 넣으려고하고 있지만, 당신이 작성한 것에 대해 어떤 라이센스를 쓸지 모르겠다. – vpzomtrrfrt
@vpzomtrrfrt 나는 [CC0] (https://creativecommons.org/)에 위의 코드를 사용권으로한다. public domain/zero/1.0 /). 비록이 코드가 범용 크레이트에 필요한 품질을 가지고 있다고는 생각하지 않습니다. 특히 정수 넘침 문제는 문제가됩니다. – CodesInChaos
https://crates.io/crates/parse_float_radix가 이제 시작되었지만 여러 목적으로 유용하지는 않을 것이라는 데 동의합니다. – vpzomtrrfrt
- 1. 문자열을 구문 분석하는 방법은 무엇입니까?
- 2. 문자열을 float로 구문 분석
- 3. android에서이 문자열을 구문 분석하는 방법은 무엇입니까?
- 4. UTF-8 중국어 문자열을 구문 분석하는 방법
- 5. PHP에서 쿼리 문자열을 구문 분석하는 방법은 무엇입니까?
- 6. 문자열을 DateTime으로 구문 분석하는 방법은 무엇입니까?
- 7. 문자열을 ctime 구조체로 구문 분석하는 방법은 무엇입니까?
- 8. 문자열을 안전하게 구문 분석하는 방법은 무엇입니까?
- 9. Javascript에서 JSON 문자열을 구문 분석하는 방법은 무엇입니까?
- 10. json 문자열을 pyserial에서 구문 분석하는 방법은 무엇입니까?
- 11. 파이썬에서 JSON 문자열을 구문 분석하는 방법은 무엇입니까?
- 12. 파이썬 : 문자열을 따옴표로 구문 분석하는 방법은 무엇입니까?
- 13. ANSI 문자열을 빠르게 구문 분석하는 방법은 무엇입니까?
- 14. 문자열을 Java 트리로 구문 분석하는 방법은 무엇입니까?
- 15. Java로 문자열을 구문 분석하는 방법은 무엇입니까?
- 16. 구분 기호없이 문자열을 구문 분석하는 방법은 무엇입니까?
- 17. ISO 문자열을 구문 분석하는 방법은 무엇입니까?
- 18. 16 진수 색상 문자열을 정수로 구문 분석하는 방법
- 19. 긴 16 진수 문자열을 uint로 구문 분석하는 방법
- 20. 잘못된 json 문자열을 구문 분석하는 방법 (16 진수 값 사용)
- 21. 문자열을 조각으로 구문 분석하는 Regexp_substr
- 22. 파일을 구문 분석하는 방법은 무엇입니까?
- 23. MemSQL - 정수/10 진수 값을 MemSQL에서 Float로 변환하는 방법은 무엇입니까?
- 24. Golang에서 인용 된 8 진수 문자열을 이스케이프 해제하는 방법은 무엇입니까?
- 25. 지수가있는 문자열을 float로 변환하는 방법은 무엇입니까?
- 26. 파이썬에서 문자열을 float로 변환하는 방법은 무엇입니까?
- 27. 문자열을 float로 변환 PHP
- 28. Excel에서 내 문자열을 구문 분석하는 방법
- 29. XML 문자열을 구문 분석하는 방법
- 30. Titanium.App.Properties 문자열을 구문 분석하는 JSON
어디에서 오는 8 진수의 부동 소수점 숫자입니까? 어쩌면 소스를 수정하는 것이 더 쉬울까요? BTW, 8 진수 "42.1"은 34.125입니다. – red75prime
실제로 구현이 실제로 중단되었습니다. "당신이 제공 한 링크에서 보듯이"누군가가 이것을 필요로하는 끔찍한 유스 케이스를 갖고 있다면 자신의 글을 쓸 수 있습니다. 하나의 특정한 기수에 관심이 있다면 쉽게 할 수 있습니다. 특히 지수가 10과 16 이외의 기지에서는 합법적이지 않기 때문에 더욱 그렇습니다. 게다가 현재의 구현보다 정확하지 않을 수는 없습니다. " – Kroltan
이것은 크레이트를위한 훌륭한 기회입니다! – Kroltan