所以我有以下代碼:單精度和雙精度鑄造給出了不同的答案
#include <iostream>
int main(){
float number = 0.6;
int anotherNumber = 20;
int value = (int) ((float) anotherNumber * number);
std::cout << value;
std::cin.get();
}
它提供了12,像它應該考慮20 * 0.6 = 12。但是,如果我改變所有彩車雙打:
#include <iostream>
int main(){
double number = 0.6;
int anotherNumber = 20;
int value = (int) ((double) anotherNumber * number);
std::cout << value;
std::cin.get();
}
它給我11代替。而爲了讓事情變得怪異,如果我更改了代碼,以便值存儲在一個變量,然後再案件後,它給出了正確的答案(12)一次。
#include <iostream>
int main(){
double number = 0.6;
int anotherNumber = 20;
double intermediate = (double) anotherNumber * number;
int value = (int) intermediate;
std::cout << value;
std::cin.get();
}
上帝的名字在這裏發生了什麼?我正在使用g ++ 4.5.3進行編譯。
除了約浮點數(這將很快我敢肯定進來),請注意,在第一種情況下,你要轉換的雙重所有平常的東西浮動。正確的浮點數字是'0.6f'。 –