বিগডিসিমাল সেট স্কেল এবং রাউন্ড


140

এই দুটি কল মধ্যে পার্থক্য কি? (আছে কি?)

// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);

6
নীচে গৃহীত উত্তরগুলি বাদে - সেটস্কেল () বিগডিসিমালের একটি নতুন অবজেক্ট তৈরি করে - এর অপরিবর্তনীয় শ্রেণি দেওয়া
prash

9
@ প্র্যাশ roundপদ্ধতিটি বিগডিসিমালের একটি নতুন উদাহরণও দেয় কারণ আপনি যেমন বলেছিলেন, দৃষ্টান্তগুলি পরিবর্তনযোগ্য নয়।
ডাইসকোগ

উত্তর:


212

একটি গুরুত্বপূর্ণ পয়েন্ট যা ইঙ্গিত করা হয়েছে তবে সরাসরি সম্বোধন করা হয়নি তা হ'ল "নির্ভুলতা" এবং "স্কেল" এর মধ্যে পার্থক্য এবং সেগুলি দুটি বিবৃতিতে কীভাবে ব্যবহৃত হয়। "নির্ভুলতা" হ'ল একটি সংখ্যার উল্লেখযোগ্য অঙ্কের মোট সংখ্যা। "স্কেল" হ'ল দশমিক বিন্দুর ডানদিকে সংখ্যাগুলির সংখ্যা।

ম্যাথকন্টেক্সট কনস্ট্রাক্টর কেবল সূক্ষ্মতা এবং রাউন্ডিংমডকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং সুতরাং স্কেল কখনই প্রথম বিবৃতিতে নির্দিষ্ট করা হয় না।

setScale() স্পষ্টতই আর্গুমেন্ট হিসাবে রাউন্ডিংমোড হিসাবে স্কেল গ্রহণ করে, তবে দ্বিতীয় বিবৃতিতে যথার্থতা কখনই নির্দিষ্ট করা যায় না।

আপনি দশমিক বিন্দু এক জায়গায় ডানদিকে সরালে পার্থক্য স্পষ্ট হবে:

// 1.
new BigDecimal("35.3456").round(new MathContext(4, RoundingMode.HALF_UP));
//result = 35.35
// 2.
new BigDecimal("35.3456").setScale(4, RoundingMode.HALF_UP);
// result = 35.3456

38
উত্তর: "" নির্ভুলতা "হ'ল সংখ্যার মোট সংখ্যা সংখ্যা s" না। যথার্থ হ'ল উল্লেখযোগ্য সংখ্যাগুলির সংখ্যা। 0.000042M এর যথার্থতা 2
ডেভিড জে

2
দেখুন: "যথার্থতা": অঙ্কের গণনাটি সঠিক ফলাফলের বামতম নঞ্জেরো অঙ্ক থেকে শুরু হয়। docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html
এডি

যদি "যথার্থ উল্লেখযোগ্য অঙ্কের সংখ্যা হয়" কেন 0.0000009 এর যথার্থতা 2 হিসাবে আসছে? এটি 1
সানচি গিরোত্রা

1
আপনার বিগডিসিমাল সেটটির মান কেমন? আপনি কীভাবে মান আউটপুট করছেন (স্ট্রিং.ফর্ম্যাট ব্যবহার করে () উল্লেখযোগ্য অঙ্কগুলি লুকিয়ে রাখতে পারে)?
ডেল পিটারস

1
@ সাঁচি গিরোত্রা হ'ল নির্ভুলতা হ'ল "অনাবৃত মানের অঙ্কের সংখ্যা"। 90 টির আনস্কেল করা মান এবং 8 এর স্কেল সহ 2 এর যথার্থতা 0.0000009 দেয়। যেমন 1 এর নির্ভুলতা, 9 টির অপ্রচলিত মান এবং of স্কেল
ডাইসকগ

52

আসলে একটি বড় পার্থক্য রয়েছে, যা আপনার মনে রাখা উচিত। সেটস্কেল সত্যিই আপনার সংখ্যার স্কেল সেট করে যেখানে আপনার সংখ্যাটি নির্দিষ্ট অঙ্কগুলিতে গোল করে তবে এটি জেডকে-র মধ্যে উল্লিখিত হিসাবে "সঠিক ফলাফলের বামতম অঙ্ক থেকে শুরু হয়"। সুতরাং আপনার নমুনা সম্পর্কিত ফলাফল একই, কিন্তু পরিবর্তে 0.0034 চেষ্টা করুন। আমার ব্লগে এটি সম্পর্কে আমার নোটটি এখানে:

http://araklefeistel.blogspot.com/2011/06/javamathbigdecimal-difference-between.html

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