문제

나는 setw와 setprecision 함수를 배우고 있습니다. 그래서 여기 지금까지 시도한 것이 있으며 몇 가지 질문이 있습니다.

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    float y = 1.25;

    cout << fixed << setw(10) << setprecision(2) << y << endl;

    cout << "\n\n\nx\n";

    float x = 213565544.4826;
    cout << fixed << setw(13) << setprecision(3) << x << endl;
    cout << fixed << setw(14) << setprecision(3) << x << endl;
    cout << fixed << setw(15) << setprecision(3) << x << endl;
    cout << fixed << setprecision(3) << x;

    cout << "\n\n\nz\n";

    float z = 213565544.4826;
    cout << setw(11) << setprecision(1) << x << endl;
    cout << fixed << setw(12) << setprecision(1) << x << endl;
    cout << fixed << setw(11) << setprecision(1) << x << endl;
    cout << setw(12) << setprecision(1) << x << endl;

    cout << "\n\n\nm\n";

    float m = -344.275;
    cout << fixed << setprecision(1) << x << endl;
    cout << fixed << setw(8) << setprecision(1) << x << endl;
    cout << fixed << setw(7) << setprecision(1) << x << endl;
    cout << fixed << setw(6) << setprecision(1) << x << endl;

    return 0;
}

그리고 입력은 다음과 같습니다.

      1.25



x
213565552.000
 213565552.000
  213565552.000
213565552.000


z
213565552.0
 213565552.0
213565552.0
 213565552.0



m
213565552.0
213565552.0
213565552.0
213565552.0

그래서 이제 내 질문은 다음과 같습니다.

1) 왜 우리는 먼저 "고정"을 사용합니까?

이 예를 보면 다음과 같습니다.

cout << setw(11) << setprecision(1) << x << endl;
cout << fixed << setw(11) << setprecision(1) << x << endl;

그들은 동일한 값을 출력하므로 고정 된 것은 실제로 무엇이 변경됩니까?

2) SETW는 음수에 대해 어떻게 작동합니까?

m의 마지막 예에서. 결과는 모든 예제에서 동일합니다. SETW의 부호 변경은 무엇입니까?

213565552.0
213565552.0
213565552.0
213565552.0

이 숫자는 어디에서 왔습니까? M의 값은 출력 된 것과 완전히 다릅니다.

3). 숫자에서 1 자리로 계산합니까?

예를 들어, 우리는 숫자 1.23과 setw (10)가 있습니다.

이전에는 6 개의 공간이 있고 1.23이 있습니다 (점은 1으로 간주되기 때문에). 그게 사실인가요?

4) Setw와 함께 SetPrecision이 사용되는 이유는 무엇입니까? 사용되지 않으면 0000이 나타나는 이유는 무엇입니까? 플로트가 처리 할 수있는만큼 많은 0s가 나타 납니까?

5) x의 값은 왜입니까?

213565552.000
 213565552.000
  213565552.000
213565552.000

x = 21356544.4826 인 경우.

숫자 44.4826은 어디에서 손실됩니까?

도움이 되었습니까?

해결책

이것들은 하나보다 5 가지 질문으로 보입니다. 그래도:

  1. std::fixed 이 표기법이 더 적합한 과학 표기법을 사용하는 대신 항상 고정 된 포인트 형식을 원한다는 것을 나타내는 데 사용됩니다. 값을 합리적으로 나타내는 데 필요한 숫자가 많이 있으면 형식은 사용을 전환합니다. x.yyyyyyEee (항상 과학적 형식을 사용하도록 요청할 수 있습니다. std::scientific).
  2. std::setw() 어떤 가치가 형식인지 신경 쓰지 않습니다! 값이 형식화되고 긍정적 인 경우 out.width() 세트, 출력은 패딩됩니다 out.fill() 적어도 캐릭터 out.width() 넓은 캐릭터. 출력이 더 큰 경우 out.width() 어쨌든 패딩은 발생하지 않습니다. 각 출력 작업 후에 [사용 out.width() 고려 out.width() 재설정됩니다 0 (다른 모든 서식 옵션은 자동으로 재설정되지 않습니다).
  3. 모든 캐릭터는 부호, 수천 개의 분리기, 소수점 등을 포함하여 너비를 향해 계산됩니다. 소수점은 정밀도로 계산되지 않습니다. out.precision() 분수 숫자 수입니다 (for std::fixed 서식) 또는 비 예기적 숫자 수 ( std::scientific 서식).
  4. 너비는 출력에 의해 얼마나 많은 문자 수를 채울 것인지, 정밀도는 얼마나 많은 [분수] 숫자를 생성 할 수 있는지 지정합니다.
  5. 이진 부동 소수점 값은 소수점 자릿수를 거의 나타낼 수 있습니다 ( float 일반적으로 6입니다. 사용하여 몇 자리 숫자를 안전하게 사용할 수 있는지 확인할 수 있습니다. std::numeric_limits<float>::digits10). 그보다 더 많은 숫자를 사용하려고 시도하면 소수점 값을 처리 할 때 (이진 값을 처리 할 때 최대 관심이있을 수 있습니다. std:numeric_limits<float>::digits 장소). 당신은보고 싶을 수도 있습니다 모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 것.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top