Floatları yuvarlama

Merhaba,
floatları virgülden sonraki 2. basamağa yuvarlamak istiyorum. Biraz araştırdım, ancak bulduğum her şey sadece yazdırırken çalışıyor ya da ben nasıl yapılacağını bilmiyorum. Virgülden sonra sadece 2 basamaklı bir değişkene ihtiyacım var.
Sfml ile yazdırmak için bu komutu kullanıyorum.

float degerx = 5,3233243;
text.setString (degerx);

Virgülden sonra sadece 2 hane olan bir değişkeni nasıl oluşturabilirim? Yada setprecision gibi komutları sfml de stStringin içinde nasıl yuvarlayabilirim?
Teşekkürler.

Merhaba,

round kullansanız olur mu?

#include <iostream>
#include <cmath>

int main(){
    float x = 1.1234;
    float y = round(x * 100) / 100;
    /*
    Virgülden sonra;
    - Tek basamak için: round(x * 10) / 10
    - İki basamak için: round(x * 100) / 100
    - Üç basamak için: round(x * 1000) / 1000
    ...
    */
    std::cout << y << std::endl;
    return 0;
}
2 Beğeni

sfml direk floatı atamana izin vermez diye hatırlıyordum ama
:confused: tuhaf hatta o yüzden std::to_string kullanıyordum

evet doğrudur bende o şekilde kullanıyorum. Sadece ne demek istediğimi anlatmak için bu şekilde yazdım.

Bu yöntemi daha öncede denemiştim ve şimdi birkez daha kontrol ettim ancak bu durumda da virgülden sonra 6 tane 0 koyuyor.

İlginç, bende o sıfırları koymadı. Kod aşağıda.

#include <iostream>
#include <cmath>

int main(){
    float x = 5.3233243;
    float y = round(x * 100) / 100;
    /*
    Virgülden sonra;
    - Tek basamak için: round(x * 10) / 10
    - İki basamak için: round(x * 100) / 100
    - Üç basamak için: round(x * 1000) / 1000
    ...
    */
    std::cout << y << std::endl;
    return 0;
}

Aldığım çıktı ise şöyle:

tanberk@tanberk:~$ g++ test.cpp -o test
tanberk@tanberk:~$ ./test
5.32
tanberk@tanberk:~$ 

Dediğiniz şekilde çalıştığını bende test ederek gördüm. Ama programın geri kallanında stringe çeviriyorum ve bu 6 basamağa tamamlayana kadar 0 koyduğunu gördüm. Yani stringe çevirince bu yöntem işe yaramadı. Stringi nasıl bölebileceğim hakkında fikriniz var mı? Teşekkürler

Bu normal, cunku 6.2831’in 10⁻² basamagina yuvarlanmis hali 6.2799999999 veya 6.28001 olabilir. “6.28” degerini alan bir float yok (ise), ekrana “6.28” yazdirmak icin string’e cevirirken yuvarlamak gerekecektir—simdiye kadar buldugun her seyin string’e cevirirken calismasinin sebebi de bu.

Virgulden sonra sadece 2 ondalik basamagi olan bir degisken anca string olabilir, zira IEEE 754 float’lari ikilik tabanda tutuluyor.

1 Beğeni

Emekleriniz için teşekkürler sorunu stringin sondan 4 karakterini silerek çözdüm. İyi çalışmalar!

std::to_string bunu yapar