BigDecimal HALF_UP yaxlitlash muammosi

0.14049 o'lchovni = 3 va HALF_UP yuvarlama rejimidan foydalanib, yumaloq qiymatni ko'rishni umid qilaman = 0.141, lekin uning o'rniga 0.140 olishni xohlayman.

Mening tushunchamga binoan, oxirgi o'nli raqam 9-dan 4-dan 5-gacha bo'lishi kerak va shkaladan 3 va 0,141ni ko'rsangiz, u 0 dan 1 gacha o'zgarishi kerak.

Bu BigDecimal setScale uslubida xato yoki menda yumaloqlik kutish noto'g'ri. Qanday qilib 0,141 ga teng bo'lmagan va 0,140 ga teng bo'lmagan yumaloq qiymatlarni olishim mumkin?

BigDecimal bd=new BigDecimal("0.14049");
BigDecimal normalizedField = field.setScale(3, RoundingMode.HALF_UP);
System.out.println(normalizedField);
// Output = 0.140
1
namuna uchun minnatdormiz, kodboshimizda ba'zi mavjud ilovalar bilan aldaydi.
qo'shib qo'ydi muallif Ashish Thukral, manba
namuna uchun minnatdormiz, kodboshimizda ba'zi mavjud ilovalar bilan aldaydi.
qo'shib qo'ydi muallif Ashish Thukral, manba
1.14049 1,140 dan 1,140 ga yaqinroq. Nima uchun siz yaxlitlashni sizni oldinga olib chiqishni kutmoqdasiz? Sizning taxminlaringiz BigDecimal emas, noto'g'ri.
qo'shib qo'ydi muallif Louis Wasserman, manba
1.14049 1,140 dan 1,140 ga yaqinroq. Nima uchun siz yaxlitlashni sizni oldinga olib chiqishni kutmoqdasiz? Sizning taxminlaringiz BigDecimal emas, noto'g'ri.
qo'shib qo'ydi muallif Louis Wasserman, manba
Sizning qiymatingiz HALF_UP uchun kuchga kirish uchun kamida 0.1405 bo'lishi kerak
qo'shib qo'ydi muallif Reimeus, manba
Sizning qiymatingiz HALF_UP uchun kuchga kirish uchun kamida 0.1405 bo'lishi kerak
qo'shib qo'ydi muallif Reimeus, manba
Sizning qiymatingiz HALF_UP uchun kuchga kirish uchun kamida 0.1405 bo'lishi kerak
qo'shib qo'ydi muallif Reimeus, manba

6 javoblar

Mening tushunchamga ko'ra, oxirgi o'nli raqam 9-dan 4-dan 5-gachani yumshatadi va shkaladan 3 va 0,141ni ko'rsangiz, u 0 dan 1 gacha bo'lishi kerak.

Bu tushuncha noto'g'ri. Rounding - bu yineleyici jarayon emas. O'lchov pozitsiyasidan keyingi birinchi raqam faqat raqamlar zanjiri emas, balki hisoblanadi. Sizning holatingizda raqam 4 bo'lib, u nolga aylanadi.

8
qo'shib qo'ydi
aniqlik kiritganingiz uchun minnatdorman, men eng kam sonli raqamdan boshlanib, yaxlitlashni boshlab, natijalarni yanada muhim kasrli joylarga yo'naltirishni taxmin qildim.
qo'shib qo'ydi muallif Ashish Thukral, manba

Mening tushunchamga ko'ra, oxirgi o'nli raqam 9-dan 4-dan 5-gachani yumshatadi va shkaladan 3 va 0,141ni ko'rsangiz, u 0 dan 1 gacha bo'lishi kerak.

Bu tushuncha noto'g'ri. Rounding - bu yineleyici jarayon emas. O'lchov pozitsiyasidan keyingi birinchi raqam faqat raqamlar zanjiri emas, balki hisoblanadi. Sizning holatingizda raqam 4 bo'lib, u nolga aylanadi.

8
qo'shib qo'ydi
aniqlik kiritganingiz uchun minnatdorman, men eng kam sonli raqamdan boshlanib, yaxlitlashni boshlab, natijalarni yanada muhim kasrli joylarga yo'naltirishni taxmin qildim.
qo'shib qo'ydi muallif Ashish Thukral, manba

Mening tushunchamga ko'ra, oxirgi o'nli raqam 9-dan 4-dan 5-gachani yumshatadi va shkaladan 3 va 0,141ni ko'rsangiz, u 0 dan 1 gacha bo'lishi kerak.

Bu tushuncha noto'g'ri. Rounding - bu yineleyici jarayon emas. O'lchov pozitsiyasidan keyingi birinchi raqam faqat raqamlar zanjiri emas, balki hisoblanadi. Sizning holatingizda raqam 4 bo'lib, u nolga aylanadi.

8
qo'shib qo'ydi
aniqlik kiritganingiz uchun minnatdorman, men eng kam sonli raqamdan boshlanib, yaxlitlashni boshlab, natijalarni yanada muhim kasrli joylarga yo'naltirishni taxmin qildim.
qo'shib qo'ydi muallif Ashish Thukral, manba

Sizning biznesingiz domeniga bog'liq holda, "4999998" holati har doim bir xil holatda bo'ladi. Shu kabi vaziyatga ega bo'ldim, miqyosi 2 edi. Shuning uchun qo'shib qo'ydim va yaxlitlash uchun qo'shimcha qadam qo'ydim. Sizning holingizda:

BigDecimal bd=new BigDecimal("0.14049");
BigDecimal normalizedField = bd.setScale(4, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP);
System.out.println(normalizedField);
0
qo'shib qo'ydi

Sizning biznesingiz domeniga bog'liq holda, "4999998" holati har doim bir xil holatda bo'ladi. Shu kabi vaziyatga ega bo'ldim, miqyosi 2 edi. Shuning uchun qo'shib qo'ydim va yaxlitlash uchun qo'shimcha qadam qo'ydim. Sizning holingizda:

BigDecimal bd=new BigDecimal("0.14049");
BigDecimal normalizedField = bd.setScale(4, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP);
System.out.println(normalizedField);
0
qo'shib qo'ydi

Sizning biznesingiz domeniga bog'liq holda, "4999998" holati har doim bir xil holatda bo'ladi. Shu kabi vaziyatga ega bo'ldim, miqyosi 2 edi. Shuning uchun qo'shib qo'ydim va yaxlitlash uchun qo'shimcha qadam qo'ydim. Sizning holingizda:

BigDecimal bd=new BigDecimal("0.14049");
BigDecimal normalizedField = bd.setScale(4, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP);
System.out.println(normalizedField);
0
qo'shib qo'ydi
Matematiklar
Matematiklar
633 ishtirokchilar

Kanalga obuna buling @Matematikak Masala va misollar yechimlari uchun guruh Guruhda faqat matematikaga oid ma'lumot bo'lishi shart.

MATEMATIKA GRANT
MATEMATIKA GRANT
356 ishtirokchilar

Guruh muallifi : @Yusupov_Ahadjon Guruh rasmiy kanali @dtm_axborotnoma Kimda chiqmagan misoli bo'lsa guruhga jo'natishi mumkin! Guruh qoidalari Chat Reklama Soʻkingan Futbol Sticker Xamma bir birini xurmat qilsin