noto'g'ri java o'nlik va shuning uchun noto'g'ri hisoblash

Men ega bo'lgan chiqim shunday:

number of bags ordered : 43 ($236.50)

discount : 5% ($11.83)

total cost : $224.68

that correct total cost should be 224.67 because 236.50 - 11.83 = 224.67

the discount I got using %.2f shows 11.83 where the original value is 11.825

total cost = bags ordered - discount

224.68 != 236.50 - 11.825 = 224.675

va shunga qaramay, men juda katta qiymatga ega bo'ldim va 224.68 ni istamasdim, lekin 224.67 .

236.50-11.83 = 224.67 ishonchliligini qanday ta'minlash mumkin, ammo 236.50-11.825 = 224.675 emas?

someone please help me with this ><

rahmat :)

0
Iltimos, kodingizni ko'rsating.
qo'shib qo'ydi muallif Michael Petrotta, manba
.2f suzuvchi nuqta arifmetikasini taklif qiladi, bu aniq bo'lmasligi mumkin.
qo'shib qo'ydi muallif Scorpion, manba

4 javoblar

Valyuta hisob-kitoblari uchun suzuvchi nuqta raqamlaridan foydalanmang - o'nlik kurslar !

3
qo'shib qo'ydi
Hozirda, mening darsim BigDecimalgacha qadar qoplanadi. Men kodlashda Dni ishlatish haqida hech qanday tasavvurga ega emasman: boshqa g'oyalar bormi?
qo'shib qo'ydi muallif Pei Pei, manba
BigDecimal ustida hech kim hech qachon dars berolmasligi ehtimoli bor ... Agar havoladagi sahifadan kirsangiz yoki google-ga kirsangiz, bu haqda ko'plab ma'lumot va misollar topasiz.
qo'shib qo'ydi muallif Gevorg, manba
Hozirda, mening darsim BigDecimalgacha qadar qoplanadi. Men kodlashda Dni ishlatish haqida hech qanday tasavvurga ega emasman: boshqa g'oyalar bormi?
qo'shib qo'ydi muallif Pei Pei, manba

O'zgaruvchan nuqta arifmetikasi valyutadagi kabi sobit o'nlik uchun yomondir. Faqat tamsayılardan foydalaning va chiqishni formatlashingiz mumkin, shunda sizda . bilan ajratilgan 2 ta raqam mavjud bo'lib, u sizga juda ko'p bosh og'rig'ini tejaydi.

Agar siz suzgichlarni saqlashni istasangiz, siz bosim bilan bajarilgan bir xil yaxlitlashni bajarish uchun yaxlitlash va ko'paytirish/bo'linish bilan ba'zi fokuslar qilishingiz kerak, masalan:

  • 11.825 * 100 = 1182.5
  • Math.round (1182.5) = 1183
  • 1183/100 = 11.83
0
qo'shib qo'ydi
Buni ikkinchi usul yordamida qila olaman: D, lekin math.round() mening dasturimda hali emas. = BigDecimal ham shunday. men buni qanday qilishni bilaman ...
qo'shib qo'ydi muallif Pei Pei, manba

Boshqa hech qanday kutubxona mashg'ulotidan foydalanmasligingiz uchun siz hali ham o'zingizning yaxlitlash usulini qo'llashingiz mumkin.

public static float round(float val) {
   return (val*100.0 + 0.5)/100.0;
}

keyingi operatsiyalarda ularni ishlatishdan oldin qadriyatlaringizni yumshatish uchun.

0
qo'shib qo'ydi
Biroq, bu aniq emas. O'zgaruvchan nuqta qiymatlari aslida o'nlik kasrlarga ega emas, shuning uchun o'nli kasrlarni belgilangan raqamlarga aylantirish yoki kesib olishga urinish chemerdir.
qo'shib qo'ydi muallif EJP, manba