Zgodnie z , zasadniczo mam wybór między defaultfloat
i fixed
podczas formatowania liczb zmiennoprzecinkowych bez notacji wykładniczej (z liczbami dziesiętnymi).Jak sformatować wartość zmiennoprzecinkową tak, aby nigdy nie używała notacji wykładniczej ani zerowania końcowego?
Jednakże chcę wybrać maximum precision które produkują dużo zera kończące dla fixed
dla wielu numerów (np 1.
) ale uniknąć kiedykolwiek użyciem notacji wykładnik. Jeśli ustawione na defaultfloat
, będzie wyglądało dobrze większość czasu, chyba że wartość jest naprawdę bardzo mała, ale nie 0.
. W takim przypadku domyślna reprezentacja przełącza się na samą notację naukową, która przerywa odbiornik sformatowanego wyjścia (ponieważ nie ma pojęcia, co oznacza 2.22045e-16
oznacza:
Więc, jak mogę zjeść moje ciasto i je zjeść? ? to znaczy, non-wykładnik notacja bez zbędnych zer wahaczami wzdłużnymi
. Uwaga: nie testować działanie flaga defaultfloat
, ponieważ mój gcc nie wydaje się, aby wdrożyć tę flagę (dotychczas), ale zakładam, że jest to ustawienie domyślne, które obowiązuje bez użycia flagi. Sprawdziłem numerFlaga, która działa zgodnie z oczekiwaniami.
Co dokładnie chcesz wydrukować, gdy wyjście ma wartość 2.22045e-16? '0' lub' 0.00000000000000000222045' [nie wiem, czy mam odpowiednią liczbę zer, ale udawam, że jest ...] –
@MatsPetersson: Drugi. – bitmask
A jeśli wartość wynosi 16.00001210121019, chcesz exaxctly, ale jeśli wartość jest 16,5, chcesz to, mam rację? Myślę, że najlepiej będzie napisać własny "float to string". To nie jest strasznie trudne. –