2014-11-04 7 views
1

integer partdouble을 받고 싶습니다. 그러나이 방법은 나를 위해 작동하지 않습니다두 배에서 장시간으로 변환하는 우아한 방법이 있습니까?

double param, fractpart, intpart; 

param = 3.14159265; 
fractpart = modf (param , &intpart); 
printf ("%f = %f + %f \n", param, intpart, fractpart); 

그것은 사실로 인해, 그 double integere-notation을 가질 수있다. 예를 들어, 3.41e10은 올바른 이중 번호입니다.

내 테스트 케이스는 다음과 같습니다

  • 더블 -> 오래 오래
  • 234343.0 -> 234,343
  • 3.41e10 -> 34100000000
  • 19.999999999 -> 19
  • -10.1 -> - 10
  • -0.0000001 -> 0

내 작업을 완료하는 아름다운 방법이 있습니까?

+2

부동 소수점을 포함하는 문자열을 'long long'또는 실제'double' 변수로 변환하는 것에 대해 이야기하고 있습니까? – Columbo

+0

@Columbo, 사실, 두 변수가 있습니다. 그러나, double -> string -> long long을 캐스팅해야한다면, 너무 좋습니다. – Denis

+2

XY 문제가 있습니까? 왜 전자 표기법이 중요할까요? – cppguy

답변

1

암시 적 변환하여 결과가 어떻게해야 자르기 :

std::cout << (long long)234343.0  << '\n' 
      << (long long)3.41e10  << '\n' 
      << (long long)19.999999999 << '\n' 
      << (long long)-10.1  << '\n' 
      << (long long)-0.0000001 << '\n'; 

경우, 컴퓨터, 출력

234343 
34100000000 
19 
-10 
0 

Demo합니다.

+3

일반적으로 이전 스타일의 캐스트는 피해야합니다. 이 경우에 당신은'static_cast ()'을 원한다. – bames53

관련 문제