Yanıtlar:
İle <iomanip>
kullanabilirsiniz std::fixed
vestd::setprecision
İşte bir örnek
#include <iostream>
#include <iomanip>
int main()
{
double d = 122.345;
std::cout << std::fixed;
std::cout << std::setprecision(2);
std::cout << d;
}
Ve çıktı alacaksın
122.34
#define FIXED_FLOAT(x) std::fixed <<std::setprecision(2)<<(x)
bu, kullanımı basitleştirir:cout<<FIXED_FLOAT(d)
Neredeyse oradaydınız, std :: fixed'ı da kullanmanız gerekiyor, bkz. Http://www.cplusplus.com/reference/iostream/manipulators/fixed/
#include <iostream>
#include <iomanip>
int main(int argc, char** argv)
{
float testme[] = { 0.12345, 1.2345, 12.345, 123.45, 1234.5, 12345 };
std::cout << std::setprecision(2) << std::fixed;
for(int i = 0; i < 6; ++i)
{
std::cout << testme[i] << std::endl;
}
return 0;
}
çıktılar:
0.12
1.23
12.35
123.45
1234.50
12345.00
setprecision(n)
kesirli bölüm değil, tüm sayı için geçerlidir. Kesirli bölüme uygulamak için sabit nokta biçimini kullanmanız gerekir:setiosflags(ios::fixed)
Kabul edilen cevabı basitleştirin
Basitleştirilmiş örnek:
#include <iostream>
#include <iomanip>
int main()
{
double d = 122.345;
std::cout << std::fixed << std::setprecision(2) << d;
}
Ve çıktı alacaksın
122.34
Referans:
Tutarlı biçimlendirme isterken tamsayılarla ilgili bir sorun yaşadım.
Tamlık için yeniden yazma:
#include <iostream>
#include <iomanip>
int main()
{
// floating point formatting example
double d = 122.345;
cout << std::fixed << std::setprecision(2) << d << endl;
// Output: 122.34
// integer formatting example
int i = 122;
cout << std::fixed << std::setprecision(2) << double(i) << endl;
// Output: 122.00
}
Bir kodlama yarışmasında benzer bir sorunu yaşadım ve ben de bu şekilde hallettim. Tüm çift değerlere 2 hassasiyet ayarlama
Önce setprecision'ı kullanmak için üstbilgi ekleme
#include <iomanip>
Ardından aşağıdaki kodu ana sayfamıza ekleyerek
double answer=5.9999;
double answer2=5.0000;
cout<<setprecision(2)<<fixed;
cout <<answer << endl;
cout <<answer2 << endl;
Çıktı:
5.99
5.00
5.00 yazmak için sabit kullanmanız gerekiyor, bu yüzden çıktınız 5.00 için gelmeyecek.
Ondalık noktadan sonra sabit 2 basamak ayarlamak için önce şunları kullanın:
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
Ardından çift değerlerinizi yazdırın.
Bu bir örnektir:
#include <iostream>
using std::cout;
using std::ios;
using std::endl;
int main(int argc, char *argv[]) {
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
double d = 10.90;
cout << d << endl;
return 0;
}
şablonlarla
#include <iostream>
// d = decimal places
template<int d>
std::ostream& fixed(std::ostream& os){
os.setf(std::ios_base::fixed, std::ios_base::floatfield);
os.precision(d);
return os;
}
int main(){
double d = 122.345;
std::cout << fixed<2> << d;
}
bilimsel için de benzer, ayrıca genişlik seçeneğiyle (sütunlar için kullanışlıdır)
// d = decimal places
template<int d>
std::ostream& f(std::ostream &os){
os.setf(std::ios_base::fixed, std::ios_base::floatfield);
os.precision(d);
return os;
}
// w = width, d = decimal places
template<int w, int d>
std::ostream& f(std::ostream &os){
os.setf(std::ios_base::fixed, std::ios_base::floatfield);
os.precision(d);
os.width(w);
return os;
}
// d = decimal places
template<int d>
std::ostream& e(std::ostream &os){
os.setf(std::ios_base::scientific, std::ios_base::floatfield);
os.precision(d);
return os;
}
// w = width, d = decimal places
template<int w, int d>
std::ostream& e(std::ostream &os){
os.setf(std::ios_base::scientific, std::ios_base::floatfield);
os.precision(d);
os.width(w);
return os;
}
int main(){
double d = 122.345;
std::cout << f<10,2> << d << '\n'
<< e<10,2> << d << '\n';
}
Sadece küçük bir nokta; başlığa aşağıdakileri koy
ad alanı std kullanarak;
sonra
std :: cout << std :: sabit << std :: setprecision (2) << d;
basitleşir
cout << sabit << setprecision (2) << d;
using namespace std;
onun iyiliği için kullanmayın - bunu neden yaptığınızı anlayın.
bu bir matris kullanan bir örnek.
cout<<setprecision(4)<<fixed<<m[i][j]