2017-09-27 239 views
2

我試圖使用一個add函數來獲取double值並將其與另一個double值相加以獲得答案。我使用get方法/函數來獲取答案值。答案值只顯示在int中,而不是double。例如像12.0 + 10.0等於22.0,但是當我顯示它只是說22以下的結果是,我的工作代碼...Double Values作爲整數打印

double x = 0.0; 
void addValue(double value) 
{ 
    x = value + x; 
} 

double getValue() 
{ 
    return x; 
} 
int main() 
{ 
    addValue(12.0); 
    addValue(10.0); 
    cout << getValue() << endl; 
    return 0; 
} 

這段代碼的結果是22 什麼我試圖得到的是22.0

我怎樣才能解決這個問題,而不必使用設置精度?

+0

的'iomanip'報頭具有[setprecision](http://en.cppreference.com/w/cpp/io/manip/setprecision)。我不知道你是否在問如何設置精度,或者如何在不使用'setprecision'的情況下做到這一點... – Jonesinator

+0

@Jonesinator我正在嘗試不使用setprecision – Nicole

+0

爲什麼?這正是它的目的。 – Jonesinator

回答

1

cout如果小數點後的分數爲0,則切斷爲舍入值。嘗試打印任何具有12.5的真實分數值的值,它將起作用。因此,如果您需要打印.0值,則需要使用setprecision或使用printf

爲了更好地理解,你可以通過這個問題 How do I print a double value with full precision using cout?

+1

這不是'std :: cout',它限制了數字;它是流插入器('<<'運算符)。你會看到**任何**輸出流的相同的東西:'std :: ofstream out(「demo.txt」); out << 12.0 <<'\ n'; '。 –

0

您可以使用std :: setprecision設置精度跟隨,但它只會保持顯著(有意義)位設置精度。在這種特殊情況下,22.0中的0不是有意義的。所以如果你真的想打印22.0,那麼你必須設置固定的精度(設定值爲你想要​​的數字)。你的代碼如下。

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

double x = 0.0; 
void addValue(double value) 
{ 
    x = value + x; 
} 

double getValue() 
{ 
    return x; 
} 
int main() 
{ 
    addValue(12.0); 
    addValue(10.0); 
    cout << fixed <<std::setprecision(1) << getValue() << endl; 
    return 0; 
} 
1

使用std::setprecision#include <iomanip>

std::cout << std::setprecision (15) << getValue() << std::endl;