webForumDet fria alternativet

runda av flyttal uppåt

6 svar · 382 visningar · startad av FredrikF

FredrikFMedlem sedan maj 200391 inlägg
#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?

neox83Medlem 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.

PeWMedlem 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.

spangoMedlem sedan juni 20008 205 inlägg
#4

Math.ceil(double a)

MotorheadMedlem 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();
}

}

FredrikFMedlem 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;

LimeMedlem sedan sep. 2001961 inlägg
#7

spango skrev:

Math.ceil(double a)

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

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)