[英]c++ cout << [double] not printing decimal places
我有一個簡單的C ++程序,我認為會打印出f和g中定義的double值作為double ...但是C ++將它們打印為整數。 我檢查了cout的默認精度,當我運行它時,輸出顯示默認精度應為6,所以我很困惑為什么雙打不正確。
#include <iostream>
#include <stdio.h>
int main() {
double f = 735416.416898;
double g = f + 0.3;
std::cout << "default precision is " << std::cout.precision() << std::endl;
std::cout << "[c++] f = " << f << std::endl;
std::cout << "[c++] g = " << g << std::endl;
printf("[c] f = %f\n", f);
printf("[c] g = %f\n", g);
f = 735416.516898;
g = f + 0.3;
std::cout << "[c++] f = " << f << std::endl;
std::cout << "[c++] g = " << g << std::endl;
printf("[c] f = %f\n", f);
printf("[c] g = %f\n", g);
return 0;
}
我看到的輸出是:
kiran@kiran-VirtualBox:~/test$ g++ -o test test.cpp
kiran@kiran-VirtualBox:~/test$ ./test
[c++] f = 735416
[c++] g = 735417
[c] f = 735416.416898
[c] g = 735416.716898
[c++] f = 735417
[c++] g = 735417
[c] f = 735416.516898
[c] g = 735416.816898
因為默認精度顯示為6,cout是否也應該顯示6位小數?
如果我做
std::cout << std::fixed << f
它打印正確(帶有所有小數位)。
只是想知道是否有人可以向我解釋這種行為? 這是預期的嗎? 我是否希望使用std :: fixed來強制打印雙打?
這是因為默認表示法和固定表示法之間的區別。
根據文件 ,
- 使用默認浮點表示法,precision字段指定要計算的有意義數字的最大數量,總計算小數點之前和小數點之后的數字 。 請注意,它不是最小值,因此如果數字的顯示位數少於精度,則不會使用尾隨零填充顯示的數字。
- 在固定和科學記數法中,精度字段確切地指定小數點后顯示的位數 ,即使這包括尾隨小數零。 在這種情況下,小數點前的數字與精度無關(增加了重點)。
流使用默認浮點表示法,直到(或除非)您將其切換為固定或科學記數法。 由於您的數字在小數點前有六位數,並且默認精度也設置為六,因此浮點數看起來像整數。
有三個浮點表示法:
std::fixed
用於定點表示法。 std::scientific
用於科學記數法。 默認表示法只使用精度值來計算數字的所有數字,而不僅僅是小數部分。 如果您使用短號碼(如3.1415),您可以看到號碼正確顯示。
知道,正如cplusplus.com文檔引用的那樣,這也很有趣:
可以通過調用str來選擇默認表示法。 unsetf ( ios_base :: floatfield )。
PS:對於C ++ 11有新的符號: hexfloat十六進制和defaultfloat為之前所謂的(無)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.