J'ai lu beaucoup de questions stackoverflow mais aucune ne semble fonctionner pour moi. J'utilise math.round()
pour arrondir. c'est le code:
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100;
System.out.println(roundOff);
}
}
la sortie que je reçois est: 123
mais je veux que ce soit 123.14
. J'ai lu que l'ajout de *100/100
serait utile, mais comme vous pouvez le constater, je n'ai pas réussi à le faire fonctionner.
il est absolument essentiel que les entrées et les sorties soient un double.
ce serait très utile si vous modifiez la ligne 4 du code ci-dessus et si vous la postez.
bien celui-ci fonctionne ...
double roundOff = Math.round(a * 100.0) / 100.0;
La sortie est
123.14
Ou comme @Rufein a dit
double roundOff = (double) Math.round(a * 100) / 100;
cela le fera pour vous aussi.
double d = 2.34568;
DecimalFormat f = new DecimalFormat("##.00");
System.out.println(f.format(d));
String roundOffTo2DecPlaces(float val)
{
return String.format("%.2f", val);
}
BigDecimal a = new BigDecimal("123.13698");
BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(roundOff);
Retournez dans votre code, remplacez 100
par 100.00
et dites-moi si cela fonctionne. Cependant, si vous voulez être formel, essayez ceci:
import Java.text.DecimalFormat;
DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value);
double finalValue = (Double)df.parse(formate) ;
Essayez:
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); }}
Je sais que cette question remonte à 2 ans, mais comme chaque corps est confronté à un problème pour arrondir les valeurs à un moment donné. Je voudrais partager une manière différente qui peut nous donner des valeurs arrondies à n’importe quelle échelle en utilisant BigDecimal
class .Here we peut éviter les étapes supplémentaires nécessaires pour obtenir la valeur finale si nous utilisons DecimalFormat("0.00")
ou si nous utilisons 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);
}
}
Ce programme nous donnerait en dessous de la sortie
Rounded value with setting scale = 123.14
Rounded value with Dividing by one = 123.14
double roundOff = Math.round(a*100)/100;
devrait être
double roundOff = Math.round(a*100)/100D;
L'ajout de 'D' à 100 le rend littéral double, le résultat sera donc précis
Ceci est long mais une solution complète, n'échoue jamais
Donnez simplement votre numéro à cette fonction en tant que double, cela vous ramènera à la valeur décimale arrondie à la valeur la plus proche de 5;
si 4.25, sortie 4.25
si 4.20, sortie 4.20
si 4.24, sortie 4.20
si 4.26, sortie 4.30
si vous voulez arrondir à 2 décimales, utilisez
DecimalFormat df = new DecimalFormat("#.##");
roundToMultipleOfFive(Double.valueOf(df.format(number)));
si jusqu'à 3 places, nouveau DecimalFormat ("#. ###")
si jusqu'à n places, nouveau 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))));
}
semble être frappé par l’arithmétique entière: dans certaines langues (int)/(int) sera toujours évaluée en tant qu’arithmétique entière. pour forcer l'arithmétique en virgule flottante, assurez-vous qu'au moins un des opérandes est non entier:
double roundOff = Math.round(a*100)/100.f;
Je viens de modifier votre code. Cela fonctionne bien dans mon système. Voir si cela aide
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100.00;
System.out.println(roundOff);
}
}