2013-10-12 57 views
2

我看到了很多關於如何在C++中用給定的精度顯示數字的帖子,但我想知道是否有方法顯示非循環數字,如x.0和循環由setprecision方法指定的寬度數?C++ Precision的問題

+0

什麼是重複數字? – Adam

+0

類似於26.38888887514183這樣的數字現在將從3888等開始重複,而對於1.0的情況則不然。 –

+1

這是默認行爲。 'setprecision'設置*最大*小數位數。如果需要的話少些,那就少用了。 'std :: fixed'可以強制一定數量的小數位(如果需要,填充0)。 – Adam

回答

3

如果你事先知道是否要打印呈現循環小數擴大數量,那麼你可以簡單地沿着線發出聲明:

if is_recurring: 
    print using expanded format 
else 
    print using fixed format 

我想你不知道提前。一般來說,計算機也不可能知道它。

如何測試幾個小數(如果使用雙精度約爲15)是否爲重複小數?

此外,你想如何打印它?以經典爲例:

3227/555 = 5.814414414414414 

我該如何打印?喜歡這個?

5.8144 

還是這樣?

5.8144 
    *** 

這似乎是一個很難解決的問題。

1

這聽起來像你真正想要的是修剪尾隨零。機器不知道一個數字是否真的是一個「循環數」,它只是一個有理數的奇特名稱,因爲浮點數學並不是基於有理數的,因此它的分母相對於數的基數是相對的。

正如亞當所說,默認輸出樣式已經忽略尾隨零。這與數學無關;它只是從字符串的末尾刪除字符。

根據標準,ios_base::fixedios_base::scientific標誌確定定性格式。如果兩者均未設置,則輸出等同於%g格式說明符printf

根據man printf

尾隨零將被從結果的小數部分移除;只有緊跟着至少一位數字時纔會出現小數點。

若要儘管以上規則最終得到一個.0,你將不得不做一些像打印到一個臨時字符串,搜索它一個小數點,並且在fixed模式重試,如果沒有找到。