2014-10-21 2 views
0

시작하려면, 나는 그 문제에 대한 다른 질문을 철저히 조사했으며 아무런 도움이되지 못했습니다. 문자열을 긴 double 유형으로 변환해야하며, 아무것도 작동하지 않습니다. 예를 들어문자열을 긴 double로 변환하는 방법은 무엇입니까?

string a="634.232"; 
long double x; 
x=strtold(a.c_str(),0); 

이 "strtold는"this outputthis input 변경합니다. 오류

+3

그것은 쉽게 될 것입니다. – TankorSmash

+1

null 포인터를 나타내는 데 '0'을 사용하지 마십시오. 그것은 매우 열악한 위생입니다. –

답변

4

확인 : 해당 문자열 구문 분석은 여러 가지 방법으로 실패 할 수 있습니다

#include <cerrno> 
#include <cstdlib> 
#include <iostream> 

const char str[] = "634.232"; 

int main() 
{ 
    char * e; 
    errno = 0; 
    long double val = std::strtold(str, &e); 

    if (*e != '\0' || errno != 0) { /* error */ std::abort(); } 

    std::cout << "SUccessfully parsed: " << val; 
} 

참고 : 문자열 않을 수없는, 또는하지의 전체 숫자, 또는있을 수 있습니다 나타냅니다 않는 수를 나타냅니다 너무 데이터 유형에 맞게 크게. 이 코드가하는 모든 가능성을 확인해야합니다. 끝 포인터 e은 전체 문자열을 사용했는지 확인하고 errno은 변환이 성공했는지 확인합니다.

+0

[데모] (http://ideone.com/cTgbzO), [데모와'std :: string'] (http://ideone.com/4cD5kF). –

+0

하지만 문자열, 일반적으로 문자열, char 배열이 아닌 변환해야합니다. 그것은 내 프로젝트에 차이가 있습니다. – YogoWafel

+2

@NWafel : 사운드 트랙이있는 순서로 재생되는 이미지가 아니라 영화를보고 싶어한다고 불평하지 않습니까? 두 번째 데모를 보았습니까? 'std :: string'에서 기본 배열의 뷰를 얻을 수 있습니다. –

2

strtold은 잘 작동해야합니다 (KerrekSB).

그러나 당신이 당신의 작업을 확인하는 동안 나는 stold를 사용하는 것이 좋습니다 것입니다 : 우리가 실제 텍스트 대신 이미지로 그 이미지를 볼 수 있도록 http://www.cplusplus.com/reference/string/stold/

string a{"634.232"}; 
long double x{stold(a)}; 
+1

'try' -'catch' 블록에서'stold'에 대한 호출을 감쌀 수 있습니다. – user657267

+0

@ user657267 사실, C에서 오류 처리를 사용할 수 없으므로 'stold'를 사용하면 얻을 수있는 또 다른 이점이 있습니다. –

+0

@ 조나단 미 (JonathanMee) : "C에서 오류 처리를 사용할 수 없습니다"라는 회의론은 특히 회의 인터페이스를 통해 모든 종류의 특정 오류를 처리하는 방법에 대해 자세히 설명했습니다. –

관련 문제