簡體   English   中英

c ++ cout << [double]不打印小數位

[英]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字段指定要計算的有意義數字的最大數量,總計算小數點之前和小數點之后的數字 請注意,它不是最小值,因此如果數字的顯示位數少於精度,則不會使用尾隨零填充顯示的數字。
  • 在固定和科學記數法中,精度字段確切地指定小數點后顯示的位數 ,即使這包括尾隨小數零。 在這種情況下,小數點前的數字與精度無關(增加了重點)。

流使用默認浮點表示法,直到(或除非)您將其切換為固定或科學記數法。 由於您的數字在小數點前有六位數,並且默認精度也設置為六,因此浮點數看起來像整數。

有三個浮點表示法:

默認表示法只使用精度值來計算數字的所有數字,而不僅僅是小數部分。 如果您使用短號碼(如3.1415),您可以看到號碼正確顯示。

知道,正如cplusplus.com文檔引用的那樣,這也很有趣:

可以通過調用str來選擇默認表示法。 unsetfios_base :: floatfield )。


PS:對於C ++ 11有新的符號: hexfloat十六進制和defaultfloat為之前所謂的(無)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM