문제

할 수 있는 함수를 작성하는 숫자 표기법으로 문자열을 나누는 그것의 계수와 지수 별도의 항목으로.수 정규 표현식을 사용하여,그러나 들어오는 번호되지 않을 수 있습 찾기 부분을 찾을 수 없습니다 그리고 나는 것을 선호 할 수 있 프로그램에서는 그 후 부속니다.

동료가 부분의 방법으로는 솔루션을 사용하여 VB6 하지만 그것은 아직 거기로서,성적증명서 아래에 보여줍니다.

cliVe> a = 1e6
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 10 exponent: 5 

되어 있어야 1 6

cliVe> a = 1.1e6
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.1 exponent: 6

cliVe> a = 123345.6e-7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: -2

cliVe> a = -123345.6e-7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: -2

해야 -1.233456 및 -2

cliVe> a = -123345.6e+7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: 12

어떤 아이디어가?방법으로,이는 CLI 기반으로 VBScript 및에서 찾을 수 있습니다 나 weblog.

도움이 되었습니까?

해결책

구글에 "과학적인 표기 regexp" 여 일치하는 번호를 포함하여, (그것을 사용하지 않!!!! 도)어떤 사용

*** warning: questionable ***
/[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/

을 포함하는 경우-.5e7 와+00000e33(둘 다 원하지 않을 수도 있습을 허용하).

대신,나 고도 추천을 사용하는 구문에 더그 Crockford 의 JSON 웹사이트 는 문서를 명시적으로 무엇을 구성하는 숫자에 JSON.여기에 해당하는 구문에 다이어그램에서 촬영하는 페이지:

alt text
(출처: json.org)

을 살펴보면 선 456 그 json2.js 스크립트(안전 변환기/JSON 에서 javascript),당신은 이 부분의 regexp:

/-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/

는 아이러니하게도,일치하지 않을 그의 구문에 다이어그램....(처럼 나는 버그를)믿 regexp 는가를 구현하는 구문에 다이어그램 이 하나:

/-?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/

고할 수 있도록 허용하려면 초기+뿐만 아니라,당신이 얻을:

/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/

추가 괄호 캡처를 좋아합니다.

또한 것을 살리의 테스트 사례를 보장하기 위해,당신은 그들을 포함 가능성을 포함 할(또는 아 포함)와 같은:

allowed:
+3
3.2e23
-4.70e+9
-.2E-4
-7.6603

not allowed:
+0003   (leading zeros)
37.e88  (dot before the e)

행운을 빕니다!

다른 팁

건물의 가장 가격 대답은,나는 수정된 정규 표현식이 약간 수 /^[+\-]?(?=.)(?:0|[1-9]\d*)?(?:\.\d*)?(?:\d[eE][+\-]?\d+)?$/.

는 혜택이 제공합니다:

  1. 할 수 있습 같은 일치하는 번호 .9 (나 (?:0|[1-9]\d*) 선택 ?)
  2. 을 방지 일치하는 그냥 운전자에서 시작하고 막는 일치하는 제 길이 문자열은(사용 예측, (?=.))
  3. 을 방지 일치하는 e9 기 때문에 그것이 필요합 \d 전에는 과학적인 표기

나의 목표에 이은 그것을 사용하는을 위한 캡처 상당한 수치와 하는 중요한 수학이다.그래서 나는 또한 슬라이스와 함께 그것을 캡처하는 그룹이다. /^[+\-]?(?=.)(0|[1-9]\d*)?(\.\d*)?(?:(\d)[eE][+\-]?\d+)?$/.

에 대한 설명을 얻는 방법 중요한 인물에서 이:

  1. 전체 캡처할 수 있는 수는 손해 parseFloat()
  2. 경기 1-3 표시됩니다으로 정의되지 않았거나 문자열을,그래서 그들을 결합(대체 undefined's '')를 제공해야는 원래의 수에서 상당한 수치를 추출할 수 있습니다.

이 regex 도 일치하는 왼쪽 패딩 제로,어떤 자바스크립트로지 하지만 나는 본적인 문제는 아무것도 추가하여 중요한 수치다,그래서 나는 방지를 참조하십시오 왼쪽 패딩 으로 혜택(특히 양식에서).그러나 나는 regex 수정할 수 있습을 중얼 왼쪽 패딩합니다.

또 다른 문제가 나는 이 regex 그것은 일치하지 않습니다 90.e9 또는 다른 숫자입니다.그러나 내가 이것을 발견 또는 이와 유사한과 일치하지 않으로 컨벤션에서 과학적인 표기를 방지하는 숫자입니다.하지만 입력할 수 있는 자바 스크립트에서,당신은 쉽게 입력 9.0e10 와 달 같은 중요한 수치입니다.

업데이트

내 테스트에서,내가 또는 오류 수 있는 경기 '.'.그래서 보면 미로 수정해야 (?=\.\d|\d) 에 이르는 최종 regex:

/^[+\-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:\d[eE][+\-]?\d+)?$/

여기에 몇 가지 펄 코드가 해킹을 함께 빠르게.

my($sign,$coeffl,$coeffr,$exp) = $str =~ /^\s*([-+])?(\d+)(\.\d*)?e([-+]?\d+)\s*$/;

my $shift = length $coeffl;
$shift = 0 if $shift == 1;

my $coeff =
  substr( $coeffl, 0, 1 );

if( $shift || $coeffr ){
  $coeff .=
    '.'.
    substr( $coeffl, 1 );
}

$coeff .= substr( $coeffr, 1 ) if $coeffr;

$coeff = $sign . $coeff if $sign;

$exp += $shift;

say "coeff: $coeff exponent: $exp";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top