2014-02-12 4 views
0

В настоящее время я использую класс DecimalFormat округлить двойное значениеОкругление двойного значения в Java

double d = 42.405; 
DecimalFormat f = new DecimalFormat("##.00"); 
System.out.println(f.format(d)); 

output: 42.41; 

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

Для примера:

IE округляет 42.405 до 42,40 и другие округляет до 42.41. Но если значения равны 42.403, 42.406, то я вижу последовательность во всех браузерах. Так что теперь я должен поставить условие в свой скрипт, поэтому, если браузер IE, тогда округление должно происходить таким образом, что я должен получить 42.40, а для других браузеров - 42.41. Как я могу это сделать?

+0

Возможный дубликат [Как округлить число до n десятичных знаков в Java] (http://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places- in-java) –

ответ

3

Вы можете указать RoundingMode для DecimalFormatter, но, пожалуйста, выберите его в соответствии с вашими потребностями (я только что привел пример, используя HALF_UP).

double d = 42.405; 
DecimalFormat f = new DecimalFormat("##.00"); 
f.setRoundingMode(RoundingMode.HALF_UP); 
System.out.println(f.format(d)); // Prints 42.41 

В качестве альтернативы, вы можете также использовать BigDecimal (упаковывают вы знаете, почему мы обычно идут BigDecimal вместо double) за то же самое.

double d = 42.405; 
BigDecimal bd = new BigDecimal(d); 
bd = bd.setScale(2, RoundingMode.HALF_UP); 
System.out.println(bd.doubleValue()); // Prints 42.41 
+0

Итак, зачем использовать огромные 'BigDecimal' для небольших чисел? Почему бы не использовать нормальное форматирование? –

+0

-1 для совершенно ненужного 'BigDecimal'. Вторая часть вашего ответа выглядит неплохо. – SebastianH

+0

@SebastianH - Как вы называете это ненужным? Это может быть не полезно для вас или, возможно, даже для OP, но я уверен, что это будет полезно для будущих пользователей, которые приходят. Я дал оба варианта, и все это на OP, чтобы использовать тот, который им нужен. Я уважаю ваш голос, но не отвечу часть «BigDecimal» из ответа. – SudoRahul

1
DecimalFormat f=new DecimalFormat("0.00"); 
String formate = f.format(value); 
double finalValue = (Double)f.parse(formate) ; 
System.out.println(finalValue); 
0

попробовать это может быть полезно:

double d = 42.405; 
System.out.println(String.format("%2.2f", d)); 
0

Также вы можете сделать это "Handly", как следовать

double d = 42.405; 
final double roundedValue = (Math.round(d * 100)/(double) 100); 

В случае 42.405 вы получаете 42.41 и в случае 42.404 - 42.4 И поэтому после

System.out.println(String.format("%2.2f", roundedValue)); 

вы получите необходимую продукцию. 42.41 или 42.40 соответственно.

Смежные вопросы