C++ C+中的cout vs printf+;给出不同的输出 #包括 #包括 #包括 使用名称空间std; int main(){ 字符串名; 浮动工资; 制作浮子; cin>>名称; cin>>工资; cin>>制造; 浮动结果=工资+0.15*made; cout

C++ C+中的cout vs printf+;给出不同的输出 #包括 #包括 #包括 使用名称空间std; int main(){ 字符串名; 浮动工资; 制作浮子; cin>>名称; cin>>工资; cin>>制造; 浮动结果=工资+0.15*made; cout,c++,printf,stdin,cout,C++,Printf,Stdin,Cout,500+1230*0.15为您提供了684.5,因此cout仍然正确,因为您只允许两位精度,即6和8 如果希望cout版本与printf格式相同,则需要使用fixed: #include <iostream> #include <iomanip> #include <stdio.h> using namespace std ; int main(){ string name ; fl

500+1230*0.15
为您提供了
684.5
,因此
cout
仍然正确,因为您只允许两位精度,即
6
8

如果希望
cout
版本与
printf
格式相同,则需要使用
fixed

    #include <iostream>
    #include <iomanip>
    #include <stdio.h>
    using namespace std ;

    int main(){        
      string name ;
    float salary ;
    float made ;

    cin >> name ;
    cin >> salary ;
    cin >> made ;

    float result = salary + 0.15*made ; 
    cout<<"TOTAL = R$ "<<setprecision(2)<<result <<endl ;
    printf("TOTAL = R$ %.2f\n", result) ;

}

500+1230*0.15
为您提供了
684.5
,因此
cout
仍然是正确的,因为您只允许两位精度,即
6
8

如果希望
cout
版本与
printf
格式相同,则需要使用
fixed

    #include <iostream>
    #include <iomanip>
    #include <stdio.h>
    using namespace std ;

    int main(){        
      string name ;
    float salary ;
    float made ;

    cin >> name ;
    cin >> salary ;
    cin >> made ;

    float result = salary + 0.15*made ; 
    cout<<"TOTAL = R$ "<<setprecision(2)<<result <<endl ;
    printf("TOTAL = R$ %.2f\n", result) ;

}

设置精度会更改有效数字的数量,因此您有两个有效数字(68)

您需要的是由
setiosflags(ios::fixed)
设置的定点格式

正确的代码是:

TOTAL = R$ 684.50
TOTAL = R$ 684.50

coutSet precision更改有效数字的数量,因此您有两个有效数字(68)

您需要的是由
setiosflags(ios::fixed)
设置的定点格式

正确的代码是:

TOTAL = R$ 684.50
TOTAL = R$ 684.50

cout默认情况下,
ostream
使用
%g
格式说明符。您需要告诉它使用
%f
,使用以下任一选项:

cout << "TOTAL = R$ " << setiosflags(ios::fixed) << setprecision(2) << result << endl;

然后写:

std::ostream&
salary( std::ostream& dest )
{
    dest.setf( std::ios_base::fixed, std::ios_base::floatfield );
    dest.precision( 2 );
    return dest;
}

std::cout默认情况下,
ostream
使用
%g
格式说明符。您需要告诉它使用
%f
,使用以下任一选项:

cout << "TOTAL = R$ " << setiosflags(ios::fixed) << setprecision(2) << result << endl;

然后写:

std::ostream&
salary( std::ostream& dest )
{
    dest.setf( std::ios_base::fixed, std::ios_base::floatfield );
    dest.precision( 2 );
    return dest;
}

std::cout You need fixed:coutYou need fixed:cout我不认为如果你传递它
ios::fixed
它就定义了
std::setiosglags
。无论如何,它不会正常工作。为什么它不能正常工作呢?我已经测试过它,它确实提供了确切要求的输出…使用哪个编译器?或者你没有实际测试它够了:它不适用于VC++,也不适用于g++。请尝试设置
ios\u base::fixed
,然后设置
ios\u base::scientific
,然后再设置一次
ios\u base::fixed
。为了记录在案,您链接到的页面总体上是不正确的。不要使用它;这很糟糕。如果您通过它,我不认为
std::setiosglags
ios::fixed
。无论如何,它都不能正常工作。为什么不能正常工作呢?我已经测试过了,它确实提供了准确的要求输出…使用哪种编译器?或者可能您实际上测试得不够彻底:它不适用于VC++,也不适用于g++。请尝试设置
ios\u base::fixed
,然后
ios\u base::scientific
,然后再
ios_base::fixed
。为了记录,您链接到的页面总体上是不正确的。不要使用它,它很糟糕。