Giriş
Bu metod bir template değil.std::to_wstring() ile kardeştir.
to_string - double
Bu sınıf aslında faydalı gibi görünse de noktadan sonra kaç hane istediğimizi belirtmemize müsade etmediği için çok iyi değil. Açıklaması şöyle
Şöyle yaparız
0 verirsek 6 küsuratlı şu çıktıyı alırız.
Elimizde bir double olsun.
1. stringstream
Örnek
Eğer double değerini scientific olarak string'e çevirmek istersek şöyle yaparız.
Şöyle yaparız.
Şu çıktıyı alırız.
Bu metod bir template değil.std::to_wstring() ile kardeştir.
to_string - double
Bu sınıf aslında faydalı gibi görünse de noktadan sonra kaç hane istediğimizi belirtmemize müsade etmediği için çok iyi değil. Açıklaması şöyle
In C++11, std::to_string defaults to 6 decimal places when given an input value of type float or double.Örnek
Şöyle yaparız
double d = 15.56;
string ss = to_string(d); // Conversion to string
6 küsüratlı şu çıktıyı alırız.15.56000000
Örnek0 verirsek 6 küsuratlı şu çıktıyı alırız.
0.000000
-0 verirsek 6 küsüratlı şu çıktıyı alırız.-0.000000
ÖrnekElimizde bir double olsun.
double d = 1e16;
Şöyle yaparız. Çıktı olarak 100000000000000000 alırız.std::string str = std::to_string (d);
to_string - double için diğer seçenekler1. stringstream
Örnek
Eğer double değerini scientific olarak string'e çevirmek istersek şöyle yaparız.
double f= 1e16;
std::stringstream ss;
ss<<d<<".csv";
std::string filename = ss.str(); // filename = 1e+16.csv
Örnek - stringstream
Şöyle yaparız. Çıktı olarak 15.56 alırız
Şöyle yaparız. Çıktı olarak 15.56 alırız
float myfloat = 15.56f;
std::stringstream ss;
ss << std::fixed << std::setprecision(2) << myfloat;
std::string s = ss.str();
2. sprintf
Şöyle yaparız.
std::string mimicked(double v) {
constexpr int prec = 6;
std::string buf(prec+10, ' ');
buf.resize(sprintf(&buf[0], "%.*g", prec, v));
return buf;
}
to_string - uint32_tuint32_t num = 33;
std::string str = std::to_string(num);
to_string - nan ve infinity
Şu değelerler ile denersek
std::numeric_limits<double>::quiet_NaN()
std::numeric_limits<double>::infinity(),
-std::numeric_limits<double>::infinity(),
nan
inf
-inf
to_string - Kendi Sınıfım İçin Özelleştirmek
Şu şekilde yapabilirim ancak tavsiye edilmiyor.
Şu şekilde yapabilirim ancak tavsiye edilmiyor.
namespace std {
string to_string(::MyClass const & c) { return c.toString(); }
} // namespace std {
// Sample use-case:
int main() {
MyClass c;
std::cout << std::to_string(c) << std::endl;
}
Açıklamasında şöylestd isim alanına eklemeden şöyle yapabiliriz.It is undefined behavior to add declarations or definitions to namespace std or to any namespace nested within std, with a few exceptions noted belowIt is allowed to add template specializations for any standard library template to the namespace std only if the declaration depends on a user-defined type and the specialization satisfies all requirements for the original template, except where such specializations are prohibited.
template<typename T> to_string(const T& _x) {
return _x.toString();
}
Bu durumda Argument Dependent Lookup (ADL) yapmak için std::to_string() yerine to_string() şeklinde kullanmak gerekir.
Hiç yorum yok:
Yorum Gönder