2016-12-06 85 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] 
> _