округлить до 2 десятичных знаков в java? [дубликат]
этот вопрос уже есть ответ здесь:
Как округлить число до n десятичных знаков в Java
29 ответов
Я прочитал много вопросов stackoverflow, но ни один, кажется, не работает для меня. я использую math.round() закруглить.
вот код:
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100;
System.out.println(roundOff);
}
}
на выходе я получаю это: 123 но я хочу, чтобы это быть 123.14. я читал, что добавление *100/100 поможет, но как видите, мне не удалось заставить его работать.
абсолютно необходимо, чтобы вход и выход были двойными.
было бы здорово, если бы вы изменили строку 4 кода выше и разместили ее.
12 ответов:
Ну это работает...
double roundOff = Math.round(a * 100.0) / 100.0;выход
123.14или как сказал @Rufein
double roundOff = (double) Math.round(a * 100) / 100;это сделает это и для вас.
BigDecimal a = new BigDecimal("123.13698"); BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN); System.out.println(roundOff);
вернитесь к своему коду и замените
100by100.00и дайте мне знать, если это работает. Однако, если вы хотите быть формальным, попробуйте это:import java.text.DecimalFormat; DecimalFormat df=new DecimalFormat("0.00"); String formate = df.format(value); double finalValue = (Double)df.parse(formate) ;
Я знаю, что это 2-летний вопрос, но как каждый орган сталкивается с проблемой округления значений в определенный момент времени.Я хотел бы поделиться другим способом, который может дать нам округленные значения, в любом масштабе с помощью
BigDecimalкласса .Здесь мы можем избежать дополнительных шагов, которые необходимы для получения конечного значения, если мы используемDecimalFormat("0.00")или черезMath.round(a * 100) / 100.import java.math.BigDecimal; public class RoundingNumbers { public static void main(String args[]){ double number = 123.13698; int decimalsToConsider = 2; BigDecimal bigDecimal = new BigDecimal(number); BigDecimal roundedWithScale = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println("Rounded value with setting scale = "+roundedWithScale); bigDecimal = new BigDecimal(number); BigDecimal roundedValueWithDivideLogic = bigDecimal.divide(BigDecimal.ONE,decimalsToConsider,BigDecimal.ROUND_HALF_UP); System.out.println("Rounded value with Dividing by one = "+roundedValueWithDivideLogic); } }эта программа даст нам ниже вывода
Rounded value with setting scale = 123.14 Rounded value with Dividing by one = 123.14
double roundOff = Math.round(a*100)/100;должно быть
double roundOff = Math.round(a*100)/100D;добавление 'D' К 100 делает его двойным литералом, поэтому полученный результат будет иметь точность
попробуй :
class round{ public static void main(String args[]){ double a = 123.13698; double roundOff = Math.round(a*100)/100; String.format("%.3f", roundOff); //%.3f defines decimal precision you want System.out.println(roundOff); }}
Это длинный, но полное доказательство решения, никогда не подводит
просто передайте свой номер этой функции как двойной, он вернет вам округление десятичного значения до ближайшего значения 5;
Если 4.25, 4.25 выход
Если 4.20, выход 4.20
Если 4.24, выход 4.20
Если 4.26, 4.30 выход
Если вы хотите округлить до 2 знаков после запятой, то используйте
DecimalFormat df = new DecimalFormat("#.##"); roundToMultipleOfFive(Double.valueOf(df.format(number)));если до 3 мест, новый DecimalFormat("#.### " )
если до n места, новые DecimalFormat("#.nTimes #")
public double roundToMultipleOfFive(double x) { x=input.nextDouble(); String str=String.valueOf(x); int pos=0; for(int i=0;i<str.length();i++) { if(str.charAt(i)=='.') { pos=i; break; } } int after=Integer.parseInt(str.substring(pos+1,str.length())); int Q=after/5; int R =after%5; if((Q%2)==0) { after=after-R; } else { if(5-R==5) { after=after; } else after=after+(5-R); } return Double.parseDouble(str.substring(0,pos+1).concat(String.valueOf(after)))); }
похоже, что вы попали в целочисленную арифметику: в некоторых языках (int)/(int) всегда будет оцениваться как целочисленная арифметика. чтобы заставить арифметику с плавающей запятой, убедитесь, что хотя бы один из операндов не является целым числом:
double roundOff = Math.round(a*100)/100.f;
Я только что изменил ваш код. Он отлично работает в моей системе. Смотрите, если это поможет
class round{ public static void main(String args[]){ double a = 123.13698; double roundOff = Math.round(a*100)/100.00; System.out.println(roundOff); } }
public static float roundFloat(float in) { return ((int)((in*100f)+0.5f))/100f; }должно быть в порядке для большинства случаев. Вы все еще можете изменять типы, если вы хотите быть совместимыми с двойниками, например.
Comments