2015-10-29 75 views
2

我在網上搜索,但無法找到我所需要的。恢復原來的價值?

有人建議使用

streamsize ss = std::cout.precision(); 

,但我無法得到它的工作。

如何設置一個雙值回setprecision後原來的狀態?

#include <iostream> 
using namespace std; 

int main() 
{ 
double a; 
cout << "enter a double value: "; 
cin >> a; 
cout << "your value in 3 decimals is " << setprecision(3) << fixed << a << endl; 
cout << "your original value is " << a << endl; 

return 0; 
} 

顯然上面的代碼不會返回a的原始值。

我預期的輸出結果是:如果用戶輸入1.267432

your value in 3 decimals is 1.267 
your original value is 1.267432 

回答

1

你可以嘗試這樣的:

#include <iomanip> 
#include <iostream> 

int main() 
{ 
    double a = 1.267432; 
    std::cout << std::fixed << std::showpoint; 
    std::cout << std::setprecision(3); 
    std::cout << a << endl; 
    return 0; 

} 
+0

這個方法我試過多時間之前我張貼的問題,這是行不通的。我不明白爲什麼。 – Tasmin

1

如何 setprecision後置雙值返回到原來的狀態?

爲此,您必須在使用setprecision()之前獲得精度。在你的問題你已經通過以下行提到:

streamsize ss = std::cout.precision(); 

,但我無法得到它的工作。

在這裏,你如何使用它:

streamsize ss = std::cout.precision(); 

double a = 1.267432; 

std::cout << "a = " << a << '\n'; 

std::cout.precision (3); 
std::cout << "a becomes = " << a << '\n'; 

std::cout.precision (ss); 
std::cout << "Original a= " << a << '\n'; 

和輸出將是這樣的:

A = 1.26743

一個變成= 1.27

原裝A = 1.26743

參考:setprecision

Run live.

+0

此方法不起作用。例如,如果用戶輸入1.42324時,輸出是0.000和1.423 – Tasmin

+1

@Tasmin,我編輯的答案。我也測試了代碼。它的工作原理就是你想要的。 [運行代碼鏈接](http://ideone.com/QWk5uJ)。 –