Bagaimana cara mengatasi jumlah persentase yang dibulatkan tidak menjadi 100?

Misalkan kita memiliki daftar item dengan bilangan bulat:

USA:       3 people
Australia: 2 people
Germany:   2 people

Jika kita menghitung persentase setiap nilai terhadap jumlah seluruh daftar, kita mendapatkan:

USA:       3/(3+2+2)*100 = 42.857...%
Australia: 2/(3+2+2)*100 = 28.571...%
Germany:   2/(3+2+2)*100 = 28.571...%

dan jika kita membulatkannya, kita mendapatkan:

USA:       43%
Australia: 29%
Germany:   29%

Jumlahnya 43+29+29 = 101 bukanlah 100, dan ini terlihat sedikit aneh bagi pengguna perangkat lunak. Bagaimana Anda mengatasi masalah ini?


person Misha Moroshko    schedule 08.03.2011    source sumber
comment
Tidak ada jalan keluar yang nyata untuk mengatasi hal ini. Masalahnya juga bisa terjadi dengan pembulatan ke arah lain. Misal 11 negara, semuanya masing-masing beranggotakan 2 orang. Menggunakan matematika yang sama, hanya akan berjumlah 99%. Dan jika Anda memiliki 200 negara, semuanya dengan 1 orang, maka semuanya akan memiliki 0%.   -  person Adam Harte    schedule 08.03.2011
comment
Terkait pasti: stackoverflow.com/questions/13483430/   -  person John Y    schedule 14.09.2017


Jawaban (4)


Pilihan 1

Jika Anda khawatir tentang hasil yang terlihat agak aneh bagi pengguna, saya akan memberi catatan kaki mengenai hasil yang menyebutkan bahwa persentasenya telah dibulatkan dan mungkin tidak berjumlah 100%. Anda dapat menampilkan pesan secara terprogram hanya jika pembulatan menyebabkan perilaku ini.

USA percentage:       43
Australia percentage: 29
Germany percentage:   29

*Percentages may not total 100 due to rounding

pilihan 2

Karena Anda menggunakan Ruby, saya sarankan menggunakan nomor rasional. Dengan cara ini Anda tidak kehilangan presisi saat dibutuhkan. Daripada catatan kaki, Anda dapat menampilkan persentase dengan bilangan rasional di sebelahnya seperti berikut:

USA percentage:       43 (3/7)
Australia percentage: 29 (2/7)
Germany percentage:   29 (2/7)

Pilihan 3

Sertakan lebih banyak tempat desimal sehingga kesalahan pembulatan tidak terlalu parah:

USA percentage:       42.9
Australia percentage: 28.6
Germany percentage:   28.6

Ini menghasilkan 100,1, bukan 101.

person Matt    schedule 08.03.2011
comment
Memasukkan lebih banyak tempat desimal sepertinya merupakan solusi/perbaikan yang bagus. - person Adam Harte; 08.03.2011
comment
Menambahkan satu tempat desimal menunjukkan kepada pemirsa bahwa ini bukan bilangan bulat dan oleh karena itu dapat diperkirakan telah dibulatkan. Banyak orang, saat melihat bilangan bulat tanpa desimal, akan berasumsi bahwa itu adalah bilangan presisi, bukan bilangan bulat. Oleh karena itu, memasukkan satu desimal dalam jawaban adalah ide bagus. - person Thorin; 25.01.2013

Anda dapat merujuk pada Metode Sisa Terbesar yang digunakan dalam pemilihan: Wikipedia: Metode Sisa Terbesar

Dalam kasus Anda, Anda punya

USA:       42.857...
Australia: 28.571...
Germany:   28.571...

Jika Anda mengambil bagian bilangan bulat, Anda mendapatkan

USA:       42
Australia: 28
Germany:   28

yang jumlahnya menjadi 98, dan Anda ingin mengambil dua lagi. Sekarang, Anda melihat bagian desimalnya

USA:       0.857...
Australia: 0.571...
Germany:   0.571...

dan ambil yang paling besar hingga totalnya mencapai 100. Kalau ambil USA, totalnya jadi 99, dan mau ambil satu lagi. Di sinilah permasalahan muncul. Karena Anda memiliki hasil imbang 0,571... antara Australia dan Jerman, jika Anda mengambil keduanya, totalnya adalah 101. Jadi, Anda memiliki dua cara untuk memilih:

(a) Jika Anda sangat ingin totalnya menjadi 100, ambil saja Australia, dan jangan ambil lagi:

USA:       43
Australia: 29
Germany:   28

(b) Jika Anda lebih memilih untuk menghormati fakta bahwa Australia dan Jerman berada pada posisi yang sama, Anda berhenti pada poin ini:

USA:       43
Australia: 28
Germany:   28
person sawa    schedule 08.03.2011
comment
saya baru saja menerapkan permata yang menggunakan metode sisa terbesar, Anda dapat memeriksanya di github.com/jethroo/lare_round dan dipersilakan untuk memperbaikinya lebih lanjut;) - person jethroo; 14.08.2013
comment
Terima kasih atas tautannya, saya belum pernah mendengarnya, tetapi membantu saya membuat fungsi saya =) - person Enissay; 23.08.2013

Jumlah komponen mungkin tidak total karena pembulatan. Standar dalam laporan statistik.

Cheat tersebut akan kembali menggigit Anda di tabel, laporan, atau lampiran berikutnya. Anda tidak dapat melacak perubahannya. Ini hanya terlihat lucu bagi orang yang tidak membaca laporan semacam ini.

Oh ya. Ini bukan kesalahan pembulatan.

person dom    schedule 20.03.2012
comment
Saya setuju dengan Anda bahwa ini hanya terlihat lucu bagi orang yang tidak membaca laporan semacam ini, dan kecurangan semacam ini sebenarnya tidak diperlukan. Namun cheat ini kemungkinan hanya untuk tampilan saja, dan data internal akan tetap apa adanya, sehingga tidak mempengaruhi tabel selanjutnya dan seterusnya. - person sawa; 02.10.2012

Anda dapat "menipu" sedikit dengan menjumlahkan semua hasil yang dibulatkan kecuali hasil yang terakhir dan memberikan nilai 100 pada hasil yang terakhir - jumlah sebelumnya...

Dalam hal ini, Anda akan mendapatkan:

USA = 43
Aus = 29
Ger = 28  (100 - (43 + 29))

Tapi itu hanya trik kotor... Anda sebaiknya mengikuti solusi yang lebih jujur/akurat yang diberikan oleh Matt karena solusi saya tampaknya menunjukkan bahwa persentase Jerman lebih kecil daripada persentase Australia.

person jaco    schedule 08.03.2011
comment
Jika Anda akan menggunakan trik kotor, terapkan koreksi pada item yang akan menghasilkan kesalahan terkecil. - person kindall; 08.03.2011