Pertanyaan Batasi presisi floating point?


Apakah ada cara untuk mengumpulkan poin mengambang ke 2 poin? Misalnya.: 3576.7675745342556 menjadi 3576.76.


8
2017-08-01 21:29


asal


Jawaban:


round(x * 100) / 100.0

Jika Anda harus membuat barang-barang mengapung:

roundf(x * 100) / 100.0

Versi fleksibel menggunakan fungsi pustaka standar:

double GetFloatPrecision(double value, double precision)
{
    return (floor((value * pow(10, precision) + 0.5)) / pow(10, precision)); 
}

12
2017-08-01 21:29



Jika Anda mencetaknya, gunakan fungsi format cetak apa pun yang tersedia untuk Anda.

Di c ++

cout << setprecision(2) << f; 

Untuk pembulatan menjadi render ke GUI, gunakan std :: ostringstream


13
2017-08-01 21:54



Kalikan dengan 100, bulat ke integer (lagi pula yang Anda inginkan), bagi dengan 100. Perhatikan bahwa karena 1/100 tidak dapat diwakili secara tepat di floating point, pertimbangkan untuk tetap menggunakan bilangan bulat presisi-tetap.


2
2017-08-01 21:30



Jangan gunakan pelampung. Gunakan bilangan bulat menyimpan jumlah sen dan cetak koma desimal sebelum 2 tempat terakhir jika Anda ingin mencetak dolar. Mengapung adalah hampir selalu salah untuk uang kecuali Anda melakukan penghitungan sederhana (seperti model matematika ekonomi yang naif) di mana hanya besaran angka yang benar-benar penting dan Anda tidak pernah mengurangi angka yang berdekatan.


2
2017-08-02 05:41



Bagi Anda googling untuk memformat float ke uang seperti saya:

#include <iomanip>
#include <sstream>
#include <string>

std::string money_format (float val)
{
    std::ostringstream oss;

    oss << std::fixed << std::setfill ('0') << std::setprecision (2) << val;

    return oss.str();
}
// 12.3456 --> "12.35"
// 1.2 --> "1.20"

Anda harus mengembalikannya sebagai string. Menempatkannya kembali ke pelampung akan kehilangan ketepatannya.


2
2017-07-30 19:05



Untuk membatasi ketepatan:
Jika x adalah float, tidak ada pembulatan:
(bergeser naik 2 digit desimal, strip pecahan, bergeser ke bawah sebanyak 2 digit desimal)

((int)(x*100.0)) / 100.0F

Float dengan pembulatan:

((int)(x*100.0 + 0.5F)) / 100.0F

Pembesaran ganda tanpa o:

((long int)(x*100.0)) / 100.0

Pembesaran ganda:

((long int)(x*100.0 + 0.5)) / 100.0

Catatan: Karena x adalah a float atau a double, bagian pecahan akan selalu ada di sana. Ini adalah perbedaan antara bagaimana # diwakili (IEEE 754) dan presisi ketepatan.
C99 mendukung bulat()


0
2017-08-06 16:22



coba gunakan

std::cout<<std::setprecision(2)<<std::cout<<x; 

harus berfungsi dan hanya 2 digit setelah floating point muncul.


0
2017-07-24 15:12



Coba ini, ini bekerja dengan sempurna

float=3576.7675745342556;
printf("%.2f",float);

mengubah beberapa objek di dalamnya untuk melihat dan mempelajari kode.


0
2017-10-15 04:43