procent z dwóch int?

Chcę dostać dwa inty, jeden podzielony przez drugi, aby uzyskać dziesiętny lub procentowy. Jak Mogę uzyskać procent lub dziesiętny z tych dwóch int? (Nie jestem pewien, czy to prawda.. Pewnie jestem daleko od tego...) na przykład:

int correct = 25;
int questionNum = 100;
float percent = correct/questionNum *100;
Tak myślałem, że dam radę, ale to nie zadziałało... Chcę dokonać dziesiętnego (jeśli istnieje) na procent ze 100 na przykład w tym przypadku jest to %25. jakieś pomysły?

Oto prawidłowy kod (dzięki Salvatore Previti!):

float correct = 25;
float questionNum = 100;
float percent = (correct * 100.0f) / questionNum;

(btw, robię projekt za pomocą tego programu do sprawdzania quizu, dlatego potrzebuję procentu lub dziesiętnego)

Author: easwee, 2011-10-22

5 answers

Jeśli nie dodasz .0f będzie traktowany tak, jakby był liczbą całkowitą, a dzielenie liczb całkowitych różni się znacznie od dzielenia zmiennoprzecinkowego:)

float percent = (n * 100.0f) / v;

Jeśli potrzebujesz liczby całkowitej z tego można oczywiście rzucić float lub double ponownie w integer.

int percent = (int)((n * 100.0f) / v);

Jeśli wiesz, że wartość n jest mniejsza niż 21474836 (czyli (2 ^ 31 / 100)), możesz zrobić wszystko używając operacji integer.

int percent = (n * 100) / v;

Jeśli masz NaN to dlatego, że nie możesz podzielić na zero z oczywiście... to nie ma sensu.

 69
Author: Salvatore Previti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-24 15:49:55

Dwie opcje:

Wykonaj podział po mnożeniu:

int n = 25;
int v = 100;
int percent = n * 100 / v;

Konwersja an int na a float przed podzieleniem

int n = 25;
int v = 100;
float percent = n * 100f / v;
//Or:
//  float percent = (float) n * 100 / v;
//  float percent = n * 100 / (float) v;
 12
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-21 21:23:50

Jeden z nich musi być pływakiem. Jednym z możliwych sposobów zapewnienia tego jest:

float percent = (float) n/v * 100;

W przeciwnym razie wykonujesz dzielenie liczb całkowitych, które obraca liczby . Ponadto powinieneś używać double, chyba że istnieje dobry powód float.

Następnym problemem, który napotkasz, jest to, że niektóre z Twoich procentów mogą wyglądać jak 24.999999999999% zamiast 25%. Jest to spowodowane utratą precyzji w reprezentacji zmiennoprzecinkowej. Będziesz musiał zdecydować, jak sobie z tym poradzić. Opcje obejmują DecimalFormat , aby "naprawić" formatowanie lub BigDecimal, aby reprezentować dokładne wartości.

 3
Author: Ryan Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-21 21:37:28
float percent = (n / (v * 1.0f)) *100
 0
Author: Francisco Spaeth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-21 21:22:34

Dobrze zrobić dziesiętny W procent można to zrobić,

float percentage = (correct * 100.0f) / questionNum;
 0
Author: Shiva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-19 08:20:08