2014-01-08 37 views
0

的沒有固定的計數下面的代碼將打印的值和b:C++的std ::流雙值沒有科學和小數

double a = 3.0, b=1231231231233.; 
cout.setf(std::ios::fixed); 
cout.unsetf(std::ios::scientific); 
cout << a << endl << b << endl 

的輸出是:

3.000000 
1231231231233.012451 

可以看到a用固定的6位小數計數輸出。 但我想輸出是這樣的:

3 
1231231231233.012451 

如何設置標誌只有一次,輸出上述結果。

+1

似乎沒有直接的方法來做到這一點......嘆息... – fatmck

回答

0

流在double之後插入0 s,因爲流的浮點值輸出的默認精度爲6.不幸的是,沒有直接的方法檢查double是否代表整數(因此您只能打印整體部分)。然而你可能做的是將該值轉換爲整數。

std::cout << static_cast<int>(a); 
+0

你不能只通過'x == floor(x)'來檢查嗎? – StilesCrisis

+0

@StilesCrisis我說沒有*直接*的方式。我們是否應該在每次我們要輸出它時檢查變量?或者我們應該在自定義的'std :: num_put'方面進行整個操作? – 0x499602D2

+0

double c = 3.13; cout << c << endl;我需要它輸出3.13而不是3.130000 – fatmck

0

浮點數將不支持的格式爲請求的默認格式。基本上有三種設置可以使用:

  • std::fixed這將使用precision()位數在小數點後面。
  • std::scientific這將使用與precision()數字的科學記數法。
  • std::defaultfloat哪個會選擇較短的兩種形式。

(也有std::hexfloat,但它只是格式化數字,方便機器可讀)。

什麼你可能要做的是創建你自己的std::num_put<char>方面,其將值的格式爲使用std::fixed格式化的剝去發送值前一個尾隨零位的本地緩衝區。

相關問題