2010-09-15 7 views
0

Si j'ai 2 enregistrements de base de données et 25 enregistrements par page, puis le code suivant:problème en utilisant des fonctions mathématiques de Java pour trouver un numéro de page pour une vue pagination

System.out.println("page count: " + (double)2/25); 

résultats dans cette sortie:

page count: 0.08 

Mais parce que j'utilise ce chiffre pour la pagination, j'ai besoin l'entier supérieur, dans ce cas: 1.

deux Math.ceil et Math.abs produisent le résultat 0 ou 0.0.

Comment se terminer avec un nombre entier de pages?

+0

Il semble que l'erreur soit dans le code que vous ne nous montrez pas. – Powerlord

+0

Pourquoi dites-vous cela? Y at-il quelque chose qui ne va pas avec ce que j'ai écrit ci-dessus? Pourriez-vous expliquer ce que vous voulez dire? – Linc

Répondre

6

La bonne façon de le faire est la suivante:

int pages = (totalRecords+recordsPerPage-1)/recordPerPage; 

Dans votre cas: pages = (2 + 25-1)/25 = 26/25 = 1

+0

+1: Je peux dire que j'ai l'habitude de traiter avec PHP et autres ... Je pensais à int/int égal à un int pour savoir pourquoi 'Math.ceil' ne fonctionnait pas correctement, mais pas pour produire le bon résultat sans utiliser 'ceil' /' floor'. – Powerlord

0

Une fois que vous obtenez 0.08, ajoutez 0.5 puis faites Math.floor.

+0

@Linc: vous devez toujours ajouter 0,5 avant d'utiliser le sol. Ou, vous pouvez utiliser Math.round qui fonctionne comme ceci: (int) Math.floor (a + 0.5f) – BoltBait

2

Vous pouvez ajouter 1 à votre résultat, puis effectuer une conversion en int.

(int) (1 + (double)2/25) 

Cela ira au nombre supérieur suivant, puis tronquer.

Mais, l'équation correcte serait:

(int) (0.5 + (double) 2/25) 

Donc, si vous avez 25 alors il serait:

0.5 + 25/25 

ou

0.5 + 1 so int of that is 1 

Vous pouvez arrondir par ajouter .5 et prendre l'int.

+0

C'est faux, imaginez s'il y a 25 enregistrements, avec pageSize = 25. La formule donne 2 pages, même s'il n'y a qu'une seule page. –

2

Math.ceil ne devrait jamais vous donner 0 pour 0.08. Clairement, il y a un bug dans le code que vous n'avez pas publié.

System.out.println(Math.ceil((double)2/25)); 

sorties 1.0 en Java 6u21 comme vous attendez.

à une supposition, votre autre code manque à la distribution double sur l'un des arguments et int/int retourne toujours int en Java.

System.out.println(Math.ceil(2/25)); 

imprime 0.0.

+0

Je faisais: Math.ceil ((2/25)) – Linc

+0

@Linc: Vous devez lancer '2' ou' 25' en double en premier, ou vous obtenez int '0' avant de faire' Math.ceil'. J'ai édité ma réponse pour le noter. – Powerlord