Saya tidak percaya saya tidak tahu cara melakukan ini, tetapi apa yang bisa saya katakan, saya tidak bisa melakukannya. Saya hanya mencoba menulis angka dalam format standar (berbeda dengan notasi ilmiah).
Saya telah membaca banyak sekali contoh bagaimana mencapai ini menggunakan "setprecision(...)" dan "fixed" dan sebagainya, tetapi masalahnya adalah ketepatan angka-angka tersebut tidak diketahui pada waktu kompilasi dan memasukkan perkiraan konservatif dengan 'setprecision (...)' meninggalkan tumpukan angka nol yang berlebihan di tempat itu.
Berikut ini contoh apa yang saya cari:
let: tau = 6.2831
tau * 0.000001 -> 0.0000062831
tau * 0.001 -> 0.0062831
tau -> 6.2831
tau * 1000 -> 6283.1
tau * 1000000 -> 6283100
Saat ini saya mendapatkan:
tau * 0.000001 -> 6.2831e-006
tau * 0.001 -> 0.0062831
tau -> 6.2831
tau * 1000 -> 6283.1
tau * 1000000 -> 6.2831e+006
Satu-satunya hal yang dapat saya lakukan adalah mengekstrak eksponen ganda kemudian jika eksponen positif 'perbaiki' presisi ke nol, jika tidak, atur presisi ke '-1 * exp'; tapi ini sepertinya cara yang sangat berbelit-belit untuk 'mematikan' notasi ilmiah. Adakah yang tahu cara yang lebih baik?
tau * 1e-80
, mungkin itulah alasan tidak adanya solusi sederhana. — BTW, ada apa dengantau * 1000000 -> 6.2831e-006
? - person leftaroundabout   schedule 19.03.2012float tau = 6.2831
, maka nilai sebenarnya adalah6.283100128173828125
. Pemformat tidak tahu bahwa 14 digit terakhir disebabkan oleh kesalahan pembulatan. - person Mike Seymour   schedule 19.03.20126.2831
dengan tepat, tetap akan sama dengan6.28310
. Tidak ada angka nol yang berlebihan dalam representasi ukuran tetap. Jika Anda ingin membedakan antara6.2831
dan6.28310
, Anda harus menggunakanstd::string
. - person MSalters   schedule 19.03.2012