Android: Как получить только две цифры после запятой в десятичном формате? не хочу обрезать значение

Как получить двойное значение, состоящее только из двух цифр после десятичной точки.

Например, если a = 190253.80846153846, то значение результата должно быть равно a = 190253.80

Попробуйте: у меня есть попытаться с этим:

public static DecimalFormat twoDForm = new DecimalFormat("#0.00");

в коде

a = Double.parseDouble(twoDForm.format(((a))));

Но я получил значение как 190253,81 вместо того, что я хочу 190253.80

Так что я должен изменить для этого?

7 ответов

Решение

Потому что Math.round() Возвращает ближайший int к аргументу. Результат округляется до целого числа путем добавления 1/2, взятия минимального значения результата и приведения результата к типу int. использование Math.floor()

пример

 public static double roundMyData(double Rval, int numberOfDigitsAfterDecimal) {
                  double p = (float)Math.pow(10,numberOfDigitsAfterDecimal);
              Rval = Rval * p;
              double tmp = Math.floor(Rval);
              System.out.println("~~~~~~tmp~~~~~"+tmp);
              return (double)tmp/p;
              }

Полный исходный код

class ZiggyTest2{


        public static void main(String[] args) {  
             double num = 190253.80846153846;
              double round = roundMyData(num,2);
              System.out.println("Rounded data: " + round);
              }

              public static double roundMyData(double Rval, int numberOfDigitsAfterDecimal) {
                  double p = (float)Math.pow(10,numberOfDigitsAfterDecimal);
              Rval = Rval * p;
              double tmp = Math.floor(Rval);
              System.out.println("~~~~~~tmp~~~~~"+tmp);
              return (double)tmp/p;
              }
            }

Попробуй это,

сделать объект BigDecimal

double a = 190253.80846153846;
BigDecimal bd = new BigDecimal(a);
BigDecimal res = bd.setScale(2, RoundingMode.DOWN);
System.out.println("" + res.toPlainString());

Без библиотек:

a = (float) (((int)(a * 100)) / 100.0f);

или для двойного:

a = (double) (((int)(a * 100)) / 100.0);

Я думаю, что это собирается вокруг значения, проверьте это

(float)Math.round(value * 100) / 100

по этой ссылке раунд десятичного числа

или этот пример

Following code works for me.    
public static double round(double value, int places) {
            //here 2 means 2 places after decimal
            long factor = (long) Math.pow(10, 2);
            value = value * factor;
            long tmp = Math.round(value);
            return (double) tmp / factor;
        }

Вот еще один способ написать его, который похож на "Шаббир", но я думаю, что его легче читать. Я действительно хотел округлить это; если он показывает.349, я хотел бы увидеть.35 - но если вы не хотите этого, то вы можете использовать Math.floor вместо моего Math.round:

public static double round(double time){
  time = Math.round(100*time);
  return time /= 100;
}

Вот мой полный код: я работаю над программой, чтобы найти 3 случайных временных интервала в 1 минуту в заданном временном отрезке для исследовательского проекта, над которым я работаю.

import java.lang.*;
import java.util.*;

class time{

public static void main (String[] args){

  int time = Integer.parseInt(args[0]);
  System.out.println("time is: "+time);
  //randomly select one eligible start time among many 
  //the time must not start at the end, a full min is needed from times given
  time = time - 1;
  double start1 = Math.random()*time;
  System.out.println(start1);
  start1 = round(start1);
  System.out.println(start1);

}

public static double round(double time){
  time = Math.round(100*time);
  return time /= 100;
}

}

запустить его с текущим выводом:

[bharthur@unix2 edu]$ java time 12
time is: 12
10.757832858914
10.76

[bharthur@unix2 edu]$ java time 12
time is: 12
0.043720864837211715
0.04
double dValue = 10.12345;
try{
    String str = Double.toString(dValue*100);`
    str = str.split("[.]")[0];
    dValue = Double.parseDouble(str)/100;
} catch (Exception e) {
    e.printStackTrace();
}
System.out.println(dValue);

Используйте этот код. Вы можете получить желаемый результат, который вы хотите.

Другие вопросы по тегам