2016-01-04 36 views
1

我有一個代碼如下:如何使用雙數據類型在C++中從50.5e-12中減去50e-12?

double a = 50e-12; 
double b = 50.5e-12; 
double c = b - a; 
std::cout<<"value of a,b and c is : "<<a<<" " <<b<<" "<<c<<std::endl; 

現在我的輸出是:一個 值,b和c是:0.0000000001 0.0000000001 0.0000000000

我可以看到我的操作數由於四捨五入和我得到一個0作爲輸出,但我期望0.5。

有人可以幫助我?

+1

需要注意的是真正的價值,並打印值可能不同...... – Jarod42

+2

輸出使用正確的格式,而不是默認的。 – MBo

+3

http://stackoverflow.com/questions/554063/how-do-i-print-a-double-value-with-full-precision-using-cout – vulkanino

回答

1

更改precision打印您的值之前:

#include <iomanip> 
#include <limits> 

std::cout << std::setprecision(std::numeric_limits<double>::digits10 + 1) 
      << "value of a, b and c is : " << a << " " << b << " " << c << std::endl; 
1

你可以告訴輸出流多少位數字顯示。以下是您可以告訴它如何使用雙數的最大位數。

#include <limits>  

cout.precision(std::numeric_limits<double>::max_digits10); 
6

在這種情況下,它似乎對我來說,這是很有道理的打印結果出來用(的C++的近似值),科學記數法:

#include <iostream> 
#include <iomanip> 

int main() { 
    double a = 50e-12; 
    double b = 50.5e-12; 
    double c = b - a; 

    std::cout << std::scientific << c << "\n"; 
} 

這將產生約你所期望:

5.000000e-13 

雖然你當然可以只打印出小數,所有的13個或15位數字(或其他)當你輸入的是(僞)科學記數法,它可能是很有道理的打印輸出方式相同。