今天改一段小代碼,發現怎么改都沒用,公式重推了一遍,還是沒問題。后來發現是整除忘了轉換類型了:
printf("=======================\n"); printf("=======================\n"); printf("=======================\n"); double aaaaa; double bbbbb; aaaaa=1/2; printf("1/2 is= %.8le\n\n",aaaaa); bbbbb=0.5; printf("0.5 is = %.8le\n\n",bbbbb); printf("=======================\n"); printf("=======================\n"); printf("=======================\n");
后來快放棄的時候才發現,原來是整數類型和浮點型不通,整數除以整數得整數,也就是說 1/3 得零,2/3 也得零
於是測試輸出:
======================= ======================= 1/2 is= 0.00000000e+00 0.5 is = 5.00000000e-01 ======================= ======================= =======================
因此盡量避免 整數除以整數,比如說改成:
1.0/2 或者: 1.0/2.0
變量的話,可以使用強制類型轉換:
#include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean ); } 當上面的代碼被編譯和執行時,它會產生下列結果: Value of mean : 3.400000
如果不使用類型轉換,結果為 3
If you want to get right result you need to write: #include <iostream> using namespace std; int main() { double test = ((double)1 / 2) * 2; cout << test << endl; return 0; }
可以參考:
C++整除:
https://zhidao.baidu.com/question/239931071.html
強制類型轉換:
https://www.cnblogs.com/bytebee/p/8535552.html
stack flow 上:
https://stackoverflow.com/questions/30188016/c-why-does-1-2-2-return-0
加油~
