2011-10-12 38 views
1
# include <iostream> 
using namespace std; 

int main() 
{ 
    double a; 
    cin >> a; 
    int b = (int) a*100; 
    cout << b << endl; 
} 

的精度如果輸入2.53,它給B = 252固定的static_cast <int>()在C++中

我知道這是一個精密的事情,但你如何解決它,而無需使用比較呢?

回答

5

如果保證是積極的,使用方法:

int b = (int) (a*100+0.5); 

如果不使用:

int b = (int) floor(a*100+0.5); 

浮動爲int投截斷(舍入到零)。

如果要保留截斷,但只想避免精度問題,請使用上面代碼中的小整數(1e-4)而不是0.5整數。

+0

似乎是這樣做的唯一方法。我曾經用java編程,所以這個問題對我來說看起來很奇怪。 – user990808

+1

@ user990808:如果您只想測試它,那麼Java中的問題完全相同。無論與實際值是多少接近的下一個整數,從浮點到整數類型的轉換都會丟棄非整數部分。 –

2

您想舍入而不是截斷。地板功能適用於此:

int b = (int)floor(a*100+0.5);