Java raqamida yaxlitlash

Men o'nli kasrlarga qanchalik yaxlitlash sonini beraman Men har joyda hamma narsani sinab ko'rdim

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);

lekin 2 ta kasrli joyga qadar aylanishim kerak

FYI - men o'rta maktab o'quvchisi-men juda murakkab narsa kerak emas Bu ishni qilish uchun mening uslublarim kamroq bo'lishi kerak 15 Men har qanday chiziqlarni sarflashim mumkin

2
qo'shib qo'ydi muallif Vishal, manba
Raqamni (N-joylarga) yaxlitlash va yaxlitlash/kesish qoidalariga ega mag'lubiyatga rasmini ko'rsatish ga ega bo'lish o'rtasida farq bor ...
qo'shib qo'ydi muallif user166390, manba

4 javoblar

Ehtimol oddiyroq yo'l bor, lekin aniq:

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

Bu 2,123 kabi 212.3 raqamiga aylanadi, uni 213 ga aylanadi, keyin uni 2,13 ga qaytaradi.

9
qo'shib qo'ydi
@izuriel - Savol yuqoriga (va Math.ceil ) dan foydalanadi. Men 212,3 dan 213 gacha aytmoqchi bo'lsam-da, tushuntirishimni tuzatdim.
qo'shib qo'ydi muallif Brendan Long, manba
Aslida Math.ceil() ga qo'ng'iroq qilish 212.3 raqamini 213 ga o'zgartiradi. Matematikada shift funktsiyasi keyingi sonda mavjud bo'lgan barcha raqamlarga bir sondan kattaroq sonlarni aylantiradi, shuning uchun hatto 212.0003 ham 213 ga yaxlitlanadi. Math.round() -ni standart yaxlitlash funktsiyasini amalga oshiradigan va Math.floor (decimal + 0.5) ga mos kelishi mumkin.
qo'shib qo'ydi muallif Brandon Buck, manba
Mening tanlovim, u qanaqa raqamni aylanishini so'rayotgani va u bilan birga chiqishi mumkin bo'lgan yechimni bergani edi. Har ikkala usulda ham Math.ceil() 212.3 ga qo'ng'iroq qilishning kodi 212 ushbu xato haqida sizni xabardor qilish uchun sharh.
qo'shib qo'ydi muallif Brandon Buck, manba

Odatda, yaxlitlash eng yaxshi tarzda render nuqtasida (string kabi, masalan,) amalga oshiriladi. Shunday qilib, raqamni eng yuqori aniqlikda saqlab qo'yishi mumkin va ma'lumotni faqat foydalanuvchiga ko'rsatgan holda qisqartirish mumkin.

Bu kod ko'p sonli o'nli kasrlarga aylanadi va shiftdan foydalanadi.

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
qo'shib qo'ydi

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

eng oson echim, mening nazarimda, bu chris tomonidan.

double myNum = .912385;
int precision = 10000; //keep 4 digits
myNum= Math.floor(myNum * precision +.5)/precision;
0
qo'shib qo'ydi
Math.ceil (x) o'rniga Math.floor (x + 0.5) nima uchun?
qo'shib qo'ydi muallif Brendan Long, manba
Buning uchun mo'ljallangan funktsiyani ( Math.ceil ) ishlatish mumkin.
qo'shib qo'ydi muallif Brendan Long, manba
masalan, agar raqam 1.4 -> 1.4 + 0.5 = 1.9 bo'lsa, taxta (1.9) = 1 bo'lsa, 1.6 -> 1.6 + 0.5 = 2,1 barobar (2.1) = 2 bo'lsa,
qo'shib qo'ydi muallif Zohaib, manba

Agar siz raqamni mag'lub qilmoqchi bo'lsangiz, quyida ko'rsatilganidek mumkin:

DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(12.912385));
0
qo'shib qo'ydi