webForumDet fria alternativet

runda av flyttal uppåt

Java

6 svar · 384 visningar · startad av FredrikF

Medlem sedan maj 200391 inlägg
Frågan#1

Jag vill runda av ett flyttal uppåt så fort talet överstiger ett heltal.

Exempelvis skall divisionen 14/10 ge 2 och inte 1.4. Med andra ord, så fort resultatet överstiger heltalskvoten av divisionen skall det höjas till nästa heltal uppåt.

Hur görs det lämpligtvis i java?

Medlem sedan okt. 2000149 inlägg
#2

Hmm, tror inte det finns någon färdig metod för detta men jag är inte säker.
Math-klassen innehåller bara en round(up) metod. Sedan finns NumberFormat men den är mer för att hantera antal decimaler dvs utseendet på talet.

Så här kan då en fullösning på problemet se ut:

 double a = 0.4999999999999;
 double b = 14.0/10.0;
 double c = b+a;
 System.out.println((int)Math.round(c));

Först så kan man inte dividera 14/10 och förvänta sig ett decimaltal utan då får man en hettal.
Därför får antingen båda eller en av talen vara decumaltal. Mna kan också casta dem till double vilket kan avara praktiskt om de inte sätts i koden.

Sedan är det bara att öka det tal med 0.49999....
och avrunda det med den vanliga avrundningsmetoden.
Om talet skulle vara ett heltal så kommer denna metod runda ner till den det heltalet.

Medlem sedan juni 200010 432 inlägg
#3

Varför inte helt enkelt testa om det finns en rest med modulooperatorn %? ..

c = a/b;
if(a%b)
  c+=1;

Om svaret ska vara i heltal, dvs.

Medlem sedan juni 20008 205 inlägg
#4

Math.ceil(double a)

Medlem sedan maj 20037 inlägg
#5

En annan variant

Här kommer en annan variant som ska funka om jag inte missförstått ditt problem.

public class Test{

public Test(){
	float x = (float)Math.ceil((float)21 / (float)10);
	System.out.println("Resultat: "+x+" Egentligt resultat: "+((float)21 / (float)10));
}

public static void main(String\[\] args){
	new Test();
}

}

Medlem sedan maj 200391 inlägg
#6

min lösning...

Jag funderade lite kring modulusoperatorn ett tag men
kom fram till föjlande lösning:

c = (int)Math.ceil(noOfMms/b) + 1;

Medlem sedan sep. 2001961 inlägg
#7

spango skrev:

Math.ceil(double a)

Som sagt... varför göra det krångligt.

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)