Java'da bir sayıyı yuvarlama

Belirli ondalık basamaklara yuvarlama sayılarını anlamıyorum Her yere baktım her şeyi denedim

currently I have my program to round up to a whole number with double rACT = Math.ceil(ACT); double rSAT = Math.ceil(SAT); double rGPA = Math.ceil(GPA);

ama 2 ondalık basamağa yuvarlamak gerekiyor

FYI - Ben bir lise öğrencisiyum Gerçekten süper karmaşık bir şeye ihtiyacım yok Bunu yapmak için benim yöntemlere ihtiyacım var 15'den az olmak istiyorum.

2
katma yazar Vishal, kaynak
Bir yuvarlama (N-yerleri) ile yuvarlama/kesilme kuralları uygulanarak bir dize temsili elde etmek arasında fark vardır.
katma yazar user166390, kaynak

4 cevap

Muhtemelen daha basit bir yol var, ama belli ki:

double rSAT = Math.ceil(SAT * 100)/100;

Bu, 2.123 gibi bir sayıyı 212.3'e dönüştürür, 213'e yuvarlar ve sonra tekrar 2.13'e böler.

9
katma
@izuriel - Soru, yuvarlama sayılarını yukarı belirtir (ve Math.ceil kullanırlar). Açıkladığım açıklamada, 212.3 ila 213 arasında olduğunu söyledim.
katma yazar Brendan Long, kaynak
Aslında Math.ceil() 'e yapılan bir çağrı 212.3 ile 213 sayısını tamamlayacak. Matematikte, tavan fonksiyonu, bir tam sayıdan daha büyük herhangi bir sayıyı bir sonraki mevcut tam sayıya yuvarlar, böylece 212.0003 bile 213 'e yuvarlanır. Standart bir yuvarlama işlevi gerçekleştiren ve Math.floor (ondalık + 0.5) ile eşdeğer olan Math.round() komutunu kullanabilirsiniz.
katma yazar Brandon Buck, kaynak
Almam, bir numarayı nasıl çevireceğini soruyordu ve ortaya çıkabileceği çözümü veriyordu. Her iki durumda da, 212.3 'deki Math.ceil() ' i çağırmanın 212 değerini vereceğini özellikle yanlıştır. Bu hata hakkında sizi bilgilendirmek için yorum yapın.
katma yazar Brandon Buck, kaynak

Genellikle yuvarlama en iyisi oluşturma sayı (örneğin, bir Dize olarak) noktasında yapılır. Bu sayede, sayı en yüksek hassasiyetle saklanabilir/iletilebilir ve bilgi sadece bir kullanıcıya gösterildiğinde kesilir.

Bu kod en fazla iki ondalık basamağa yuvarlanır ve tavan kullanır.

double unrounded = 3.21235;
NumberFormat fmt = NumberFormat.getNumberInstance();
fmt.setMaximumFractionDigits(2);
fmt.setRoundingMode(RoundingMode.CEILING);

String value = fmt.format(unrounded);
System.out.println(value);
2
katma

The question has been asked before, check out How to round a number to n decimal places in Java

Benim düşünceme göre en basit çözüm bu, Chris tarafından:

double myNum = .912385;
int precision = 10000; //keep 4 digits
myNum= Math.floor(myNum * precision +.5)/precision;
0
katma
Neden Math.ceil (x) yerine Math.floor (x + 0.5) olsun?
katma yazar Brendan Long, kaynak
Bunun için tasarlanan işlevi kullanarak toplanabilir ( Math.ceil ).
katma yazar Brendan Long, kaynak
0.5 eklenmesi, mesela, eğer sayı 1,4 -> 1.4 + 0.5 = 1.9 ise, zemin (1.9) = 1 ise sayı 1,6 -> 1,6 + 0,5 = 2,1 kat (2,1) = 2 olur.
katma yazar Zohaib, kaynak

Bir sayının dize temsilini arıyorsanız, aşağıdaki gibi yapabilirsiniz:

DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(12.912385));
0
katma