문제

수학 표현식에 지수 값이 포함되어 있는지 확인하고 지수 값을 소수 값으로 바꿉니다.

입력 : "10993.657030812325 * 8.20681165367255E-05"

출력 : "10993.657030812325 * 0.0000820681165367255"

내가 직면하고있는 복잡성은 수학적 표현 내에서 그것을 감지하는 것입니다.

내가 가진 정규 표현식을 탐지하는 정규 표현식은 다음과 같습니다.

(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?
.

그러나 전체 표현식에 대해 true와 일치하는 것은이를 해결할 수있는 직접적인 방법이 있거나이를 해제하고 개별적으로 확인해야합니다.

도움이 되었습니까?

해결책

제공, 그 지수가 너무 커지지 않습니다 (99 미만) 이 코드를 사용하십시오.

  String formula = "10993.657030812325*8.20681165367255E-05";
  String pattern = @"(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)"; 

  // Let's change format of each double precision in the formula:
  String result = Regex.Replace(formula, pattern, (match) => {
    // Simple formating; may be you should use more elaborated one
    Double db = Double.Parse(match.Value, CultureInfo.InvariantCulture);
    // Now, you should format out the Double db:
    // First eliminate exponent (F99 is the maximum possible; F100 won't do) 
    String St = db.ToString("F99", CultureInfo.InvariantCulture);

    // Next eliminate trailing '0' 
    if (St.IndexOf('.') >= 0)
      St = St.TrimEnd('0');

    return St.TrimEnd('.'); 
  });
.

결과는 "10993.6570308123 * 0.0000820681165367255"

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top