2016-12-06 89 views
-5

我是初学者。我希望为我的计算机科学提供一些帮助,因为它失败了,我不明白为什么setprecision在这里不起作用,但在我制作的其他程序中工作得很好?我明白这段代码并不完整,但对我来说没有意义。十进制值不起作用? (C++)

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    int sug = 1.5; 
    int but = 1; 
    int flo = 2.75; 
    int tel = 48; 
    double ans; 

    cout << "How much cookies would you like to make? "; 
    cin >> ans; 
    cout << setprecision(2) << fixed << showpoint << "For " << tel << " amount of cookies, you need " << flo << endl; 

    return 0; 
} 
+3

指定小数时使用'float'而不是'int' –

+1

您的代码[不起作用](http://importblogkit.com/2015/07/doe S-不工作/)? –

+0

你认为'2.75'是一个整数,所以它被评估为'2'。或'3'。无论如何,实际上,因为无论如何,这并不合乎逻辑。 –

回答

3

声明

int flo = 2.75; 

&hellip;声明flo作为int类型的变量。初始值为2.75,截断为相等或较小幅度的最接近的整数值,即普通的2。如果你要求编译器提供更多的警告它很可能会警告这一点。

反正setprecision对整数的输出没有影响。

但可以非常容易地改变输出表达式浮点型,例如double

cout << "You need " << 0.0 + flo << endl; 

或者你可以改变的flo声明键入double


一个简单的方法,以使编译器不接受代码从一个初始化丢弃的信息,是用花括号初始化:

int flo{ 2.75 }; //! Just won't compile. 

与G ++和Visual C++编译器:

 
[C:\my\forums\test] 
> g++ foo.cpp 
foo.cpp: In function 'int main()': 
foo.cpp:3:19: error: narrowing conversion of '2.75e+0' from 'double' to 'int' inside { } 
    int flo{ 2.75 }; 
       ^
foo.cpp:3:9: warning: unused variable 'flo' [-Wunused-variable] 
    int flo{ 2.75 }; 
     ^

[C:\my\forums\test] 
> cl foo.cpp 
foo.cpp 
foo.cpp(3): error C2397: conversion from 'double' to 'int' requires a narrowing conversion 
foo.cpp(3): warning C4244: 'initializing': conversion from 'double' to 'int', possible loss of data 

[C:\my\forums\test] 
> _