2013-01-22 2 views
2

C에서 setprecision (2)을 사용하여 숫자를 시도 할 때 "0.093"과 같은 숫자가 반환됩니다 .- 소수점 이하 두 자리가 아닌! 나는 이것이 왜 있는지를 알 수 없다. 나는 약간의 요점이 심각하게 누락 된 경우에 대비하여 나의 초보적인 코드를 아래에 포함시켰다. 감사!집합 정밀도가 제곱 된 숫자 앞에 0을줍니다.

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() 
{ 
    double tax = 0.06 ; //Tax Rate 
    float cost ; //Cost of item 
    float computed ; //Non-rounded tax 

    cout << "Enter the cost of the item: " ; 
    cin >> cost ; 

    computed = tax*cost; 

    cout << "Computed: $" << computed << endl; 
    cout << "Charged: $" << setprecision(2) << computed << endl; //Computed tax rounded to 2 decimal places 



    return 0; 

} 
+0

http://www.cplusplus.com/reference/iomanip/setprecision에 따르면 소수점 이하 2 자리가 아닌 _precision_ (유효 숫자 2 자리) 2 자리를 묻습니다. 아마 당신은 http://www.cplusplus.com/reference/iomanip을 봐야 할 것입니다. – vonbrand

답변

7

당신이 고정을 사용하는 부동 소수점 형식을 변경하지 않는 경우 std::setprecision 후 자리를 소수점을 을 설정하지만, 중요한 (일명 "의미") 숫자하지 않기 때문입니다 소수점 이하 자릿수. 에서

cout << "Charged: $" << fixed << setprecision(2) << computed << endl; 
0

: 소수점 정밀도 최대 자릿수를 결정 http://www.cplusplus.com/reference/iomanip/setprecision/

부동 소수점 값을 표현하기 위해 삽입 작업에 기록 할 수있는 형식을 변경하려면, 당신은 당신의 출력 스트림에 std::fixed (documentaion)을 넣어야 할 . 이것이 어떻게 해석되는지는 floatfield 형식 플래그가 특정 표기법으로 설정되었는지 여부에 달려 있습니다.
...

기본 부동 소수점 표기법에서 정밀도 필드는 소수점 이전과 이후의 총계에 표시 할 의미있는 자릿수의 최대 수를 지정합니다.

귀하의 경우 : 0.093, 93 - 두 개의 의미있는 자릿수.

관련 문제