বিগডিসিমালকে * সর্বদা * রুপ করা দুটি দশমিক স্থান


217

আমি বিগডিসিমাল মানগুলি দুটি দশমিক স্থানে নিয়ে যাওয়ার চেষ্টা করছি।

আমি ব্যাবহার করছি

BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING));
logger.trace("rounded {} to {}", value, rounded);

তবে আমি যা ধারাবাহিকভাবে চাই তা তা করে না:

rounded 0.819 to 0.82
rounded 1.092 to 1.1
rounded 1.365 to 1.4 // should be 1.37
rounded 2.730 to 2.8 // should be 2.74
rounded 0.819 to 0.82

আমি উল্লেখযোগ্য অঙ্কগুলির বিষয়ে চিন্তা করি না, আমি কেবল দুটি দশমিক স্থান চাই। আমি কীভাবে এটি বিগডিসিমালের সাথে করব? বা এর সাথে আরও ভাল কোন উপযোগী শ্রেণি / পাঠাগার রয়েছে?


9
আপনি যদি সত্যই গোল করতে চান তবে আপনি রাউন্ডিংমড ব্যবহার করবেন। HALF_UP
গিলবার্ট লে ব্ল্যাঙ্ক ২ '

উত্তর:


401
value = value.setScale(2, RoundingMode.CEILING)

19
এটি আসলে কীভাবে আমি চাই তা কাজ করে। নির্দিষ্ট পার্শ্ববর্তী দশমিক জায়গার সাথে কাজ করার round()সময় এই পার্থক্যটি কি কেবল উল্লেখযোগ্য অঙ্কগুলির সাথে setScaleকাজ করে বা এর থেকেও আরও কিছু রয়েছে?
ব্র্যাড ম্যাস

44
"Typcal রাউন্ডিং" করতে রাউন্ডিংমড.এএএএলএফ_আপ ব্যবহার করুন। এটি 1.111 1.11 দেয় [সিইলিংগ 1.12 দেয়]
গ্রজেগোর্জ দেব

5
জন্য ধন্যবাদ RoundingMode.HALF_UP। ডকুমেন্টেশন অনুসারে এটি স্কুলে সাধারণত গোল করা পদ্ধতি - আমার যা প্রয়োজন I
রৌপ্য

1
আপনার মানগুলি যদি অ্যাকাউন্টিং অ্যাপ্লিকেশনের মতো নেতিবাচক হতে পারে তবে যত্ন নিন। আপনার CEILING
ডেল

1
setScale(...)কাজ করে কেন ? দেখতে BigDecimal setScale এবং বৃত্তাকার
জেসন আইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.