시작하려면, 나는 그 문제에 대한 다른 질문을 철저히 조사했으며 아무런 도움이되지 못했습니다. 문자열을 긴 double 유형으로 변환해야하며, 아무것도 작동하지 않습니다. 예를 들어문자열을 긴 double로 변환하는 방법은 무엇입니까?
string a="634.232";
long double x;
x=strtold(a.c_str(),0);
이 "strtold는"this output에 this input 변경합니다. 오류
시작하려면, 나는 그 문제에 대한 다른 질문을 철저히 조사했으며 아무런 도움이되지 못했습니다. 문자열을 긴 double 유형으로 변환해야하며, 아무것도 작동하지 않습니다. 예를 들어문자열을 긴 double로 변환하는 방법은 무엇입니까?
string a="634.232";
long double x;
x=strtold(a.c_str(),0);
이 "strtold는"this output에 this input 변경합니다. 오류
확인 : 해당 문자열 구문 분석은 여러 가지 방법으로 실패 할 수 있습니다
#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
은 변환이 성공했는지 확인합니다.
[데모] (http://ideone.com/cTgbzO), [데모와'std :: string'] (http://ideone.com/4cD5kF). –
하지만 문자열, 일반적으로 문자열, char 배열이 아닌 변환해야합니다. 그것은 내 프로젝트에 차이가 있습니다. – YogoWafel
@NWafel : 사운드 트랙이있는 순서로 재생되는 이미지가 아니라 영화를보고 싶어한다고 불평하지 않습니까? 두 번째 데모를 보았습니까? 'std :: string'에서 기본 배열의 뷰를 얻을 수 있습니다. –
strtold
은 잘 작동해야합니다 (KerrekSB).
그러나 당신이 당신의 작업을 확인하는 동안 나는 stold
를 사용하는 것이 좋습니다 것입니다 : 우리가 실제 텍스트 대신 이미지로 그 이미지를 볼 수 있도록 http://www.cplusplus.com/reference/string/stold/
string a{"634.232"};
long double x{stold(a)};
'try' -'catch' 블록에서'stold'에 대한 호출을 감쌀 수 있습니다. – user657267
@ user657267 사실, C에서 오류 처리를 사용할 수 없으므로 'stold'를 사용하면 얻을 수있는 또 다른 이점이 있습니다. –
@ 조나단 미 (JonathanMee) : "C에서 오류 처리를 사용할 수 없습니다"라는 회의론은 특히 회의 인터페이스를 통해 모든 종류의 특정 오류를 처리하는 방법에 대해 자세히 설명했습니다. –
그것은 쉽게 될 것입니다. – TankorSmash
null 포인터를 나타내는 데 '0'을 사용하지 마십시오. 그것은 매우 열악한 위생입니다. –