I have a Double that I want to knock the extra digits after the decimal place off of (I’m not too concerned about accuracy but feel free to mention it in your answer) prior to conversion into a String.
I was wondering whether it would be better to cast to an int or to use a DecimalFormat and call format(..) . Also, is it then more efficient to specify String.valueOf() or leave it as it is and let the compiler figure it out?
Sorry if I sound a bit ignorant, I’m genuinely curious to learn more of the technical details.
For reference, i’m drawing text to and android canvas:
c.drawText("FPS: " + String.valueOf((int)lastFps), xPos, yPos, paint);
I made a program that used System.nanoTime() to calculate the execution time of these two methods:
Here are the respective results:
80984944
6048075593
Granted my tests probably aren’t perfect examples. I’m just using math.random(), which generates a number that will always cast to 0, which might affect results. However, these results do make sense – casting should be cheap, since it likely doesn’t operate on the bits at all – the JVM just treats the bits differently.
Edit: If I pull out the instantiation of the formatter for the second example, the program runs in 3155165182ns. If I multiply the random numbers by Integer.MAX_VALUE in both cases (with the instantiation pulled out), the results are: 82100170 and 4174558079. Looks like casting is the way to go.