2013-10-12 70 views
0

我的環境沒有printf()或任何等效物,所以我自己寫。但我不知道如何執行float類型的這種轉換。我試圖看到gcc如何做,但它很難理解。如何在不使用printf()的情況下在stdout上打印浮點數?

+0

「詢問代碼的問題必須證明對所解決問題的最低限度理解,包括嘗試解決方案,爲什麼他們不工作以及預期結果。」你試過什麼了?什麼是不工作呢?你提到「浮點類型的轉換」,但你需要轉換什麼?難道你不是隻是想寫一個需要浮動和寫入輸出的方法嗎? –

+0

@JoshuaTaylor:我沒有發佈我的代碼,因爲它完全錯誤..但我確實。等一下。 –

+0

...轉換是從浮點到ASCII –

回答

4

浮點格式化很容易出錯。編寫一個適用於「大多數」數字的簡單實現看起來很容易,但它很可能會在非常大的數字,非常小的數字以及接近於零的數字上突破,更不用說IEEE754的低於正常水平,無窮大和NaN。它也可能會出現錯誤的尾隨小數,無法提供允許逐位再現浮點數的字符串表示。

幸運的是,在那裏有一些庫實現了爲教育,嵌入式系統或爲了改進標準庫格式的某些方面而對浮點數進行格式化的工作。如果可能的話,我建議你合併David Gay's dtoa library,它已經在Python和其他地方進行過廣泛的測試。

+0

真的很容易出錯......這就是爲什麼我尋求幫助並沒有提供任何代碼的線程......我寫了一個小例程,似乎從其他printf()的embbed系統獲得靈感,似乎工作正常,但它顯示完全錯誤與我測試的各種「浮動」號碼。感謝您的鏈接。我要去看看 –

2

你可以看看musl libc的實現。 musl是一個輕量級的libc。

src/stdio/vfprintf.c定義fmt_fp功能,他們基本上浮子轉換成字符串爲fprintf轉換修飾符如f

如果您在因特網上使用關鍵字ftoa進行搜索,您會發現一些函數將float轉換爲字符串的其他實現。

+1

爲方便起見,這裏有一個鏈接[src/stdio/vfprintf.c,第208行](http://git.musl-libc.org/cgit/musl/tree/src/stdio/vfprintf.c#n208)。 –

+0

非常感謝!我會查看代碼 –

相關問題