Saya perlu menyimpan dobel sebagai string. Saya tahu saya dapat menggunakan printf
jika saya ingin menampilkannya, tetapi saya hanya ingin menyimpannya dalam variabel string sehingga saya dapat menyimpannya di peta nanti (sebagai nilainya , bukan kunci ).
171
Jawaban:
Cara peningkatan (tm) :
Cara Standar C ++ :
Catatan : Jangan lupa
#include <sstream>
sumber
#include <sstream>
untuk c ++ way :)#include <sstream>
, Anda akan mendapatkan kesalahan "tipe tidak lengkap tidak diizinkan."sumber
operator <<
mengembalikan astd::ostream&
daripada astringstream&
.to_string
fungsi. Saya menggunakan Microsoft Visual C ++ 2013.Cara Standard C ++ 11 (jika Anda tidak peduli dengan format output):
to_string
adalah fungsi perpustakaan baru yang diperkenalkan di N1803 (r0), N1982 (r1) dan N2408 (r2) " Simple Numeric Access ". Ada jugastod
fungsi untuk melakukan operasi terbalik.Jika Anda ingin memiliki format output yang berbeda dari
"%f"
, gunakan metodesnprintf
atauostringstream
seperti yang diilustrasikan dalam jawaban lain.sumber
8.0
itu memberi saya string"8.000000"
, sementara"8"
itu akan baik-baik saja.1e-9
menghasilkan0.000000
Jika Anda menggunakan C ++, hindari
sprintf
. Ini un-C ++ y dan memiliki beberapa masalah. Stringstreams adalah metode pilihan, lebih disukai dienkapsulasi seperti pada Boost.LexicalCast yang dapat dilakukan dengan cukup mudah:Pemakaian:
sumber
Anda dapat menggunakan std :: to_string di C ++ 11
sumber
std::to_string()
hanya mengembalikan 0,000000 dan tidak dalam bentuk ilmiah.sprintf
tidak apa-apa, tetapi dalam C ++, cara konversi yang lebih baik, lebih aman, dan juga sedikit lebih lambat adalah denganstringstream
:Anda juga dapat menggunakan Boost.LexicalCast :
Dalam kedua kasus,
str
harus"453.23"
sesudahnya. LexicalCast memiliki beberapa kelebihan karena memastikan transformasi selesai. Menggunakanstringstream
s secara internal.sumber
Saya akan melihat C + + String Toolkit Libary . Baru saja memposting jawaban yang serupa di tempat lain. Saya telah menemukannya sangat cepat dan dapat diandalkan.
sumber
Herb Sutter memiliki artikel yang bagus tentang pemformatan string . Saya sarankan membacanya. Saya telah menautkannya sebelumnya pada SO.
sumber
Masalah dengan lexical_cast adalah ketidakmampuan untuk mendefinisikan presisi. Biasanya jika Anda mengonversi dobel menjadi string, itu karena Anda ingin mencetaknya. Jika presisi terlalu banyak atau terlalu sedikit, itu akan mempengaruhi output Anda.
sumber
Anda juga bisa menggunakan stringstream .
sumber
Heh, saya baru saja menulis ini (tidak terkait dengan pertanyaan ini):
sumber
Anda mungkin ingin membaca posting saya sebelumnya di SO. (Versi makro dengan objek ostringstream sementara.)
Sebagai catatan: Dalam kode saya sendiri, saya mendukung snprintf (). Dengan array char pada stack lokal, itu tidak efisien. (Yah, mungkin jika Anda melebihi ukuran array dan mengulang untuk melakukannya dua kali ...)
(Saya juga sudah membungkusnya melalui vsnprintf (). Tapi itu perlu saya beberapa jenis pengecekan. Tolong kalau Anda mau kodenya ...)
sumber
Lihatlah
sprintf()
dan keluarga.sumber
Untuk operasi ini, Anda harus menggunakan Fungsi ecvt, fcvt atau gcvt:
Sebagai fungsi:
sumber
Anda bisa mencoba gaya yang lebih ringkas:
sumber
Gunakan
to_string()
.contoh:
jalankan sendiri: http://ideone.com/7ejfaU
Ini juga tersedia:
sumber
Anda dapat mengonversi apa pun menjadi apa pun menggunakan fungsi ini:
penggunaan:
sumber