Возможный дубликат:
круглые два-два десятичных знака в java
Я хочу округлить двойное значение до двух десятичных знаков.
например: у меня двойной d = 2; и результат должен быть результатом = 2.00
Возможный дубликат:
круглые два-два десятичных знака в java
Я хочу округлить двойное значение до двух десятичных знаков.
например: у меня двойной d = 2; и результат должен быть результатом = 2.00
Нет разницы во внутреннем представлении между 2 и 2.00. Вы можете использовать Math.round
для округления значения до ближайшего целого числа - чтобы округлить до двух десятичных знаков, вы можете умножить на 100, округлить, а затем разделить на 100, но вы не должны ожидать, что результат будет равным 2dps, из-за характера двоичной арифметики с плавающей запятой.
Если вас интересует только форматирование значения до двух знаков после запятой, посмотрите DecimalFormat
- если вас интересует несколько десятичных знаков, вы должны действительно использовать BigDecimal
. Таким образом, вы узнаете, что вы действительно имеете дело с десятичными цифрами, а не с "ближайшим доступным значением double
".
Другим вариантом, который вы можете рассмотреть, если вы всегда имеете дело с двумя десятичными знаками, является сохранение значения как long
или BigInteger
, зная, что он точно в 100 раз превышает реальное значение - эффективно сохраняет центы вместо долларов, например.
Math.round(number*100.0)/100.0;
double RoundTo2Decimals(double val) {
DecimalFormat df2 = new DecimalFormat("###.##");
return Double.valueOf(df2.format(val));
}
import java.text.DecimalFormat;
public class RoundTest {
public static void main(String[] args) {
double i = 2;
DecimalFormat twoDForm = new DecimalFormat("#.00");
System.out.println(twoDForm.format(i));
double j=3.1;
System.out.println(twoDForm.format(j));
double k=4.144456;
System.out.println(twoDForm.format(k));
}
}
Я предполагаю, что вам нужен форматированный вывод.
System.out.printf("%.2f",d);
вы также можете использовать этот код
public static double roundToDecimals(double d, int c)
{
int temp = (int)(d * Math.pow(10 , c));
return ((double)temp)/Math.pow(10 , c);
}
Он дает вам возможность контролировать количество чисел после точки.
d = number to round;
c = number of decimal places
подумайте, что это будет полезно
Это сделало бы это.
public static void main(String[] args) {
double d = 12.349678;
int r = (int) Math.round(d*100);
double f = r / 100.0;
System.out.println(f);
}
Вы можете сократить этот метод, легко понять, почему я так написал.
public static double addDoubles(double a, double b) {
BigDecimal A = new BigDecimal(a + "");
BigDecimal B = new BigDecimal(b + "");
return A.add(B).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}