Ik heb veel stackoverflow-vragen gelezen, maar geen enkele lijkt voor mij te werken. ik gebruik math.round()
om af te ronden.
dit is de code:
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100;
System.out.println(roundOff);
}
}
de output die ik krijg is: 123
maar ik wil dat het 123.14
is. ik heb gelezen dat het toevoegen van *100/100
zal helpen, maar zoals je kunt zien ben ik er niet in geslaagd om het werkend te krijgen.
het is absoluut essentieel dat zowel invoer als uitvoer een dubbele zijn.
het zou een grote hulp zijn als je regel 4 van de bovenstaande code zou veranderen en posten.
Antwoord 1, autoriteit 100%
Nou, deze werkt…
double roundOff = Math.round(a * 100.0) / 100.0;
Uitvoer is
123.14
Of zoals @Rufein zei
double roundOff = (double) Math.round(a * 100) / 100;
dit zal het ook voor u doen.
Antwoord 2, autoriteit 20%
double d = 2.34568;
DecimalFormat f = new DecimalFormat("##.00");
System.out.println(f.format(d));
Antwoord 3, autoriteit 14%
String roundOffTo2DecPlaces(float val)
{
return String.format("%.2f", val);
}
Antwoord 4, autoriteit 11%
BigDecimal a = new BigDecimal("123.13698");
BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(roundOff);
Antwoord 5, autoriteit 3%
Ga terug naar je code en vervang 100
door 100.00
en laat me weten of het werkt.
Als je echter formeel wilt zijn, probeer dan dit:
import java.text.DecimalFormat;
DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value);
double finalValue = (Double)df.parse(formate) ;
Antwoord 6, autoriteit 2%
Ik weet dat dit een vraag van 2 jaar oud is, maar aangezien elk lichaam een probleem heeft om de waarden op een bepaald moment af te ronden. Ik zou graag een andere manier willen delen die ons afgeronde waarden op elke schaal kan geven door BigDecimal
klasse .Hier kunnen we extra stappen vermijden die nodig zijn om de uiteindelijke waarde te krijgen als we DecimalFormat("0.00")
gebruiken of 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);
}
}
Dit programma zou ons onderstaande output geven
Rounded value with setting scale = 123.14
Rounded value with Dividing by one = 123.14
Antwoord 7, autoriteit 2%
Probeer:
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); }}
Antwoord 8, autoriteit 2%
double roundOff = Math.round(a*100)/100;
zou moeten zijn
double roundOff = Math.round(a*100)/100D;
Door ‘D’ toe te voegen aan 100 wordt het dubbel letterlijk, dus het geproduceerde resultaat heeft precisie
Antwoord 9
Dit is een lange maar een volledig bewijsbare oplossing, faalt nooit
Geef gewoon je getal als dubbel aan deze functie door, het zal je de decimale waarde naar boven afronden op de dichtstbijzijnde waarde van 5;
indien 4.25, output 4.25
indien 4.20, uitgang 4.20
indien 4.24, uitgang 4.20
indien 4.26, uitgang 4.30
als je wilt afronden op 2 decimalen, gebruik dan
DecimalFormat df = new DecimalFormat("#.##");
roundToMultipleOfFive(Double.valueOf(df.format(number)));
indien maximaal 3 plaatsen, nieuwe DecimalFormat(“#.###”)
indien maximaal n plaatsen, nieuwe 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))));
}
Antwoord 10
het lijkt alsof je wordt geraakt door rekenkunde met gehele getallen: in sommige talen wordt (int)/(int) altijd geëvalueerd als rekenkunde met gehele getallen.
om rekenkunde met drijvende komma te forceren, moet u ervoor zorgen dat ten minste één van de operanden geen geheel getal is:
double roundOff = Math.round(a*100)/100.f;
Antwoord 11
Ik heb zojuist je code aangepast. In mijn systeem werkt het prima. Kijk of dit helpt
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100.00;
System.out.println(roundOff);
}
}
Antwoord 12
public static float roundFloat(float in) {
return ((int)((in*100f)+0.5f))/100f;
}
Zou in de meeste gevallen in orde moeten zijn. Je kunt nog steeds van type veranderen als je bijvoorbeeld wilt voldoen aan doubles.