In base allo ios_base manipulators, ho fondamentalmente la scelta tra defaultfloat
e fixed
durante la formattazione di numeri in virgola mobile senza notazione esponenziale (con numeri decimali).Come si formatta un valore in virgola mobile in modo che non usi mai la notazione esponenziale né abbia zeri finali?
Tuttavia, voglio scegliere il maximum precision che produrrebbe un sacco zeri finali per fixed
per molti numeri (ad esempio 1.
), ma evitare di mai usare la notazione esponente. Se impostato su defaultfloat
, sembrerà a destra la maggior parte del del tempo, a meno che il valore sia davvero molto piccolo, ma non lo sia 0.
. In questo caso, la rappresentazione predefinita passa alla notazione scientifica da sola, che interrompe il destinatario dell'output formattato (poiché non ha idea di cosa significa 2.22045e-16
.
Quindi, come posso avere la mia torta e mangiarla, anche io ? Cioè, non esponente notazione senza zeri trascinamento inutili
. Nota: non ho testare l'effetto della bandiera defaultfloat
, dato che il mio gcc non sembra di attuare tale bandiera (ancora), ma presumo che sia l'impostazione predefinita che si applica senza utilizzare alcun flag. Ho controllato lo fixed
, che si comporta come previsto.
Che cosa si desidera stampare esattamente quando l'output è 2.22045e-16? '0' o' 0.00000000000000000222045' [non sono sicuro di aver ottenuto il giusto numero di zeri, ma faccio finta che sia ...] –
@MatsPetersson: il secondo. – bitmask
E se il valore è 16.00001210121019, lo si vuole esaxcamente, ma se il valore è 16.5, lo si desidera, vero? Penso che tu stia meglio scrivendo il tuo "float to string". Non è terribilmente difficile. –