Rounding a double to 5 decimal places in Java ME

前端 未结 8 465
旧时难觅i
旧时难觅i 2020-12-10 05:18

How do I round a double to 5 decimal places, without using DecimalFormat?

相关标签:
8条回答
  • 2020-12-10 05:45
    public static double roundNumber(double num, int dec) {
            return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
    }
    
    0 讨论(0)
  • 2020-12-10 05:46

    I stumbled upon here looking for a way to limit my double number to two decimal places, so not truncating nor rounding it. Math.Truncate gives you the integral part of the double number and discards everything after the decimal point, so 10.123456 becomes 10 after truncation. Math.Round rounds the number to the nearest integral value so 10.65 becomes 11 while 10.45 becomes 10. So both of these functions did not meet my needs (I wish that .Net had overloaded both of these to allow truncating or rounding up to a certain number of decimal places). The easiest way to do what I needed is:

    //First create a random number 
    Random rand = new Random();
    
    //Then make it a double by getting the NextDouble (this gives you a value 
    //between 0 and 1 so I add 10 to make it a number between 10 and 11
    double chn = 10 + rand.NextDouble();
    
    //Now convert this number to string fixed to two decimal places by using the
    //Format "F2" in ToString
    string strChannel = chn.ToString("F2");
    
    //See the string in Output window
    System.Diagnostics.Debug.WriteLine("Channel Added: " + strChannel);
    
    //Now convert the string back to double so you have the double (chn) 
    //restricted to two decimal places
    chn = double.Parse(strChannel);
    
    0 讨论(0)
  • 2020-12-10 05:52
    DecimalFormat roundFormatter = new DecimalFormat("########0.00000");
    
    public Double round(Double d)
        {
            return Double.parseDouble(roundFormatter.format(d));
        }
    
    0 讨论(0)
  • 2020-12-10 05:56

    If you are okay with external libraries, you can have a look at microfloat, specifically MicroDouble.toString(double d, int length).

    0 讨论(0)
  • 2020-12-10 06:01

    Try the following

    double value = Double.valueOf(String.format(Locale.US, "%1$.5f", 5.565858845));
    
    System.out.println(value); // prints 5.56586
    
    value = Double.valueOf(String.format(Locale.US, "%1$.5f", 5.56585258));
    
    System.out.println(value); // prints 5.56585
    

    Or if you want minimal amount of code

    Use import static

    import static java.lang.Double.valueOf;
    import static java.util.Locale.US;
    import static java.lang.String.format;
    

    And

    double value = valueOf(format(US, "%1$.5f", 5.56585258));
    

    regards,

    0 讨论(0)
  • 2020-12-10 06:02

    Whatever you do, if you end up with a double value it's unlikely to be exactly 5 decimal places. That just isn't the way binary floating point arithmetic works. The best you'll do is "the double value closest to the original value rounded to 5 decimal places". If you were to print out the exact value of that double, it would still probably have more than 5 decimal places.

    If you really want exact decimal values, you should use BigDecimal.

    0 讨论(0)
提交回复
热议问题