爲什麼atof將「14718.5084」舍入爲14718.5? 有沒有辦法阻止(即得到整個號碼14718.5084)?函數atof()將其結果舍入爲整數部分
代碼:
double latitude=atof("14718.5084");
std::cout <<"latitude test "<<latitude<< "\n";
,輸出是:
latitude test 14718.5
感謝
爲什麼atof將「14718.5084」舍入爲14718.5? 有沒有辦法阻止(即得到整個號碼14718.5084)?函數atof()將其結果舍入爲整數部分
代碼:
double latitude=atof("14718.5084");
std::cout <<"latitude test "<<latitude<< "\n";
,輸出是:
latitude test 14718.5
感謝
因爲atof
返回double
,這你轉換爲float
。 (我猜這就是你在做什麼)。
此外,14718.5084
不能完全表示。例如:
double f = 14718.5084;
給我f == 14718.508400000001
。
二進制沒有任何denary像1/10或1/100所以它的四捨五入。 – 2012-04-03 12:16:37
試試這個代碼,看看它正是你想要的:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char input [256];
printf("Enter something: ");
gets(input);
printf("Result: %f\n", atof(input));
return 0;
}
也許你在打印時失去了數字...
試試這個:
double latitude=atof("14718.5084");
std::cout.precision(9);
std::cout <<"latitude test "<< latitude << "\n";
+1因爲打印 – 2012-04-03 11:31:47
我現在添加了我的代碼。謝謝,但我不認爲印刷是我的問題 – user1106106 2012-04-03 11:34:56
請參閱附加代碼,打印它是;) – HWende 2012-04-03 11:40:04
#include <limits>
double latitude=atof("14718.5084");
typedef std::numeric_limits<double> dbl;
std::cout <<"latitude test ";
std::cout.precision(dbl::digits10);
std::cout<<latitude<< "\n";
我有一個稍微不同的問題,但它符合標題。 atof看起來像四捨五入到整數部分,它不是一個輸出精度問題。 我的解決方案是更改我的Ubuntu安裝的區域設置。 小數由逗號而不是點分隔。
試試這個代碼(逗號而不是點):
double latitude=atof("14718,5084");
std::cout <<"latitude test "<<latitude<< "\n";
如果輸出正確的浮點數(也許用點分隔),你應該改變你的區域設置爲英語或用逗號浮點值工作在您的數據中(例如德語區域設置)
區域設置可能會添加更多混淆,顯然它們在整個工具鏈中並不總是有效。
E.g.我遇到了這樣一個問題,即由atof(例如0.85 - > 0)將分隔值四捨五入爲int,因爲語言環境需要逗號分隔的值。但同時,調試器IDE也不接受逗號分隔的值(例如,在調試過程中嘗試更改變量值時)。
很遺憾地看到這個答案downvoted。 +1,因爲我猜它可能會幫助一些搜索標題的人。 – Micka 2015-01-10 21:55:21
你指的是atof吧? – 2012-04-03 11:26:22
我添加了代碼。 – user1106106 2012-04-03 11:33:41