我的環境沒有printf()
或任何等效物,所以我自己寫。但我不知道如何執行float
類型的這種轉換。我試圖看到gcc如何做,但它很難理解。如何在不使用printf()的情況下在stdout上打印浮點數?
回答
浮點格式化很容易出錯。編寫一個適用於「大多數」數字的簡單實現看起來很容易,但它很可能會在非常大的數字,非常小的數字以及接近於零的數字上突破,更不用說IEEE754的低於正常水平,無窮大和NaN。它也可能會出現錯誤的尾隨小數,無法提供允許逐位再現浮點數的字符串表示。
幸運的是,在那裏有一些庫實現了爲教育,嵌入式系統或爲了改進標準庫格式的某些方面而對浮點數進行格式化的工作。如果可能的話,我建議你合併David Gay's dtoa
library,它已經在Python和其他地方進行過廣泛的測試。
真的很容易出錯......這就是爲什麼我尋求幫助並沒有提供任何代碼的線程......我寫了一個小例程,似乎從其他printf()的embbed系統獲得靈感,似乎工作正常,但它顯示完全錯誤與我測試的各種「浮動」號碼。感謝您的鏈接。我要去看看 –
你可以看看musl libc的實現。 musl
是一個輕量級的libc。
在src/stdio/vfprintf.c
定義fmt_fp
功能,他們基本上浮子轉換成字符串爲fprintf
轉換修飾符如f
。
如果您在因特網上使用關鍵字ftoa
進行搜索,您會發現一些函數將float
轉換爲字符串的其他實現。
爲方便起見,這裏有一個鏈接[src/stdio/vfprintf.c,第208行](http://git.musl-libc.org/cgit/musl/tree/src/stdio/vfprintf.c#n208)。 –
非常感謝!我會查看代碼 –
- 1. 如何在沒有printf的情況下打印ULONG_MAX
- 2. 如何在不打印pid的情況下打印「$$」?
- 3. 如何在不顯示打印對話的情況下打印?
- 4. 如何在不使用尾數/指數格式的情況下打印浮點值?
- 5. 如何在不使用循環的情況下打印階乘?
- 6. 如何在不使用u'\ uXXXX'的情況下打印unicode
- 7. 使用printf在x86 nasm中打印浮點數32位
- 8. 在沒有Printf或任何函數的情況下在C中打印int
- 9. 如何在不使用/ dev/stderr的情況下在stderr上打印
- 10. 如何在AMD OpenCL SDK中使用printf打印半精度浮點數?
- 11. 如何在不打開Java的情況下打印Word文檔?
- 12. 如何在不使用操作符'/'的情況下劃分兩個浮點數?
- 13. 如何在不捨入的情況下打印所有小數點?
- 14. 在不使用SetRoundingMode()的情況下截斷浮點值
- 15. 如何在不使用std lib函數的情況下打印某些內容?
- 16. SSRS 2008 - 在縱向不打印的情況下打印PDF
- 17. arm-none-eabi-gcc:使用printf打印浮點數
- 18. 如何使下一個printf()在同一行上打印而不在下面?
- 19. 如何在不顯示java中的printdialog的情況下打印
- 20. 如何在不使用表格的情況下浮動div
- 21. 如何在沒有舍入的情況下將浮點值打印到小數點後2位
- 22. 打印在ARM的Cortex M0 UART控制檯中使用printf()的浮點數
- 23. 如何在不隱藏C#的情況下打印Excel?
- 24. 在不使用main()方法的情況下在控制檯上打印消息
- 25. 使用printf以不同的精度打印浮動數字
- 26. 僅在信息存在的情況下打印節點的值
- 27. 如何在不使用雙打的情況下使用BigDecimals
- 28. 如何在不使用float的情況下進行浮點運算
- 29. 如何使用Java,讓用戶在不使用打印對話框的情況下設置打印機選項?
- 30. 雙點打印的情況下應該打印否?
「詢問代碼的問題必須證明對所解決問題的最低限度理解,包括嘗試解決方案,爲什麼他們不工作以及預期結果。」你試過什麼了?什麼是不工作呢?你提到「浮點類型的轉換」,但你需要轉換什麼?難道你不是隻是想寫一個需要浮動和寫入輸出的方法嗎? –
@JoshuaTaylor:我沒有發佈我的代碼,因爲它完全錯誤..但我確實。等一下。 –
...轉換是從浮點到ASCII –