#include <iostream>
int main(int, char **argv)
{
std::cout << 1.23e45 << std::endl;
}
打印
1.23E + 045
當與MS Visual Studio 2003中編譯,並
1.23E + 45
在我的Linux機器上。
如何指定指數字段的寬度(以及爲什麼第一個地方存在差異)?
#include <iostream>
int main(int, char **argv)
{
std::cout << 1.23e45 << std::endl;
}
打印
1.23E + 045
當與MS Visual Studio 2003中編譯,並
1.23E + 45
在我的Linux機器上。
如何指定指數字段的寬度(以及爲什麼第一個地方存在差異)?
我不認爲這是可能的標準操縱器。 (如果是的話,我希望被糾正,並學習如何)
你唯一剩下的選擇是自己創建一個streambuf,並攔截所有指向數據流的指數,手工重新格式化它們並將它們傳遞給到底層的流。
似乎很多工作,雖然不是火箭科學,但也不是微不足道的任務。
關於'爲什麼'的問題:我知道linux將指數定義爲最小兩位數,我想Windows將它指定爲最小三位?
// on linux
std::cout << std::scientific << 1.23e4 << std::endl
還增加了一個前導零:
1.230000e+04
調查iomanip標題。它具有很多寬度精度等功能。
正如@彼得的回答的後續,我一直在尋找運營商內部< <(ostream的&,雙)。事實上,沒有字段可以指定指數的顯着性或寬度。在窗口上,運營商< <轉發到sprintf,它也沒有指數大小。
接下來,sprintf函數(在Windows上)調用_cfltcvt_l,這是一個我們沒有源代碼的函數,但是它的簽名沒有提供指數精度。
我對Linux的實現一無所知。
我需要哪一個?寬度是全寬度,精度是尾數的位數。 – 2008-11-06 13:26:35