বিগডেসিমালে যেমন>, =, <তুলনা অপারেটরগুলি কীভাবে ব্যবহার করবেন


106

বিগডিসিমাল ডেটা টাইপ হিসাবে ইউনিটপ্রাইস সেট সহ আমার একটি ডোমেন ক্লাস রয়েছে। দামের তুলনা করার জন্য এখন আমি একটি পদ্ধতি তৈরি করার চেষ্টা করছি তবে মনে হচ্ছে বিগডিসিমাল ডেটা টাইপের তুলনা অপারেটর আমার নেই। আমি কি ডেটা টাইপ পরিবর্তন করতে হবে বা অন্য কোন উপায় আছে?


যেহেতু BigDecimalএকটি Object, এটি কোনও কাজ করে না। কিন্তু আপনি কেবল একে অপরের থেকে এক বিয়োগ এবং যদি ফলে মান পরীক্ষা পারে <0, ==0বা >0। অন্যথায় আপনি বিগডিসিমাল
সোমজভাগুয়ে

4
এটা কেন একটি আছে compareToপদ্ধতি যা ফেরৎ -1, 0 বা 1. কোনটি মূলত Comparable
এম। দিনুম

উত্তর:


117

শ্রেণীর প্রতিটি বস্তুর BigDecimalএকটি পদ্ধতি থাকে compareToআপনি এটি অন্য বিগডিসিমালের সাথে তুলনা করতে ব্যবহার করতে পারেন। ফল compareToতারপর তুলনা করা হয় > 0, == 0অথবা < 0আপনার যা প্রয়োজন উপর নির্ভর করে। ডকুমেন্টেশন পড়ুন এবং আপনি খুঁজে পাবেন।

অপারেটার ==, <, >ইত্যাদি শুধুমাত্র মত আদিম ধরনের তথ্য ব্যবহার করা যেতে পারে int, long, doubleমত বা তাদের রাপার শ্রেনীর Integerএবং Double

এর ডকুমেন্টেশন থেকে compareTo:

BigDecimalনির্দিষ্ট সঙ্গে এটি তুলনা BigDecimal

দুটি BigDecimal বস্তু যা মান সমান হয় তবে আলাদা স্কেল থাকে (২.০ এবং ২.০০ এর মতো) এই পদ্ধতি দ্বারা সমান বিবেচিত হয়। এই পদ্ধতিটি ছয়টি বুলিয়ান তুলনা অপারেটরগুলির প্রতিটি (<, ==,>,> =,! =, <=) এর পৃথক পদ্ধতির পক্ষে দেওয়া হয়। এই তুলনাগুলি সম্পাদনের জন্য প্রস্তাবিত প্রতিমাটি হ'ল: (x.compareTo(y) <op> 0)যেখানে where<op> ছয়টি তুলনা অপারেটরগুলির মধ্যে একটি।

রিটার্নস: -1, 0, বা 1 এই বিগডিসিমাল হিসাবে সংখ্যার তুলনায় কম, সমান বা ভ্যালারের চেয়ে বড়।


4
তবে কি টেকটিস্টো পদ্ধতিটি দামটি তার চেয়ে বড়, সমান বা তার চেয়ে কম কিনা তা আবিষ্কার করতে সহায়তা করে?
user3127109

4
হ্যাঁ. সেই তথ্যটি উত্তরের প্রদত্ত লিঙ্কে রয়েছে।
ড্রু কেনেডি

4
@ ব্যবহারকারী3127109 হ্যাঁ, a.compareTo(b)যদি শূন্যের চেয়ে বড় হয় তবে a > b, 0যদি a == b, এবং যদি শূন্যের চেয়ে কম হয় a < b
জোল্টন

124

সংক্ষিপ্ত হতে:

firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"    
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="  
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="    

22

compareToবিগডিসিমাল পদ্ধতিটি ব্যবহার করুন :

পাবলিক ইন্ট কম্পেটটিও (বিগডিসিমাল ভাল) নির্দিষ্ট বিগডিসিমালের সাথে এই বিগডিসিমালের তুলনা করে।

Returns:
-1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.

12

আপনি নামে পদ্ধতি ব্যবহার করতে পারেন compareTo, x.compareTo(y)। এটি x এবং y সমান হলে 0, x যদি y এর চেয়ে বড় এবং -1 x এর চেয়ে ছোট হয় তবে ফিরে আসবে


11

সমস্ত ছয় বুলিয়ান তুলনা অপারেটরগুলির জন্য একটি উদাহরণ এখানে রয়েছে (<, ==,>,> =,! =, <=):

BigDecimal big10 = new BigDecimal(10);
BigDecimal big20 = new BigDecimal(20);

System.out.println(big10.compareTo(big20) < -1);  // false
System.out.println(big10.compareTo(big20) <= -1); // true
System.out.println(big10.compareTo(big20) == -1); // true
System.out.println(big10.compareTo(big20) >= -1); // true
System.out.println(big10.compareTo(big20) > -1);  // false
System.out.println(big10.compareTo(big20) != -1); // false

System.out.println(big10.compareTo(big20) < 0);   // true
System.out.println(big10.compareTo(big20) <= 0);  // true
System.out.println(big10.compareTo(big20) == 0);  // false
System.out.println(big10.compareTo(big20) >= 0);  // false
System.out.println(big10.compareTo(big20) > 0);   // false
System.out.println(big10.compareTo(big20) != 0);  // true

System.out.println(big10.compareTo(big20) < 1);   // true
System.out.println(big10.compareTo(big20) <= 1);  // true
System.out.println(big10.compareTo(big20) == 1);  // false
System.out.println(big10.compareTo(big20) >= 1);  // false
System.out.println(big10.compareTo(big20) > 1);   // false
System.out.println(big10.compareTo(big20) != 1);  // true

5

BigDecimalতাই আপনি ব্যবহার করতে পারবেন না, একটি আদিম নয় <, >অপারেটর। তবে এটি যেহেতু একটি Comparable, আপনি compareTo(BigDecimal)একই প্রভাবটি ব্যবহার করতে পারেন । যেমন:

public class Domain {
    private BigDecimal unitPrice;

    public boolean isCheaperThan(BigDecimal other) {
        return unitPirce.compareTo(other.unitPrice) < 0;
    }

    // etc...
}

1

এই থ্রেডের প্রচুর উত্তর রয়েছে যা উল্লেখ করে যে বিগডিসিমাল.কম (বিগডিসিমাল) পদ্ধতিটি বিগডিসিমাল উদাহরণগুলির তুলনা করতে ব্যবহার করে । আপনি কীভাবে আপনার বিগডিসিমাল উদাহরণ তৈরি করছেন সে সম্পর্কে যত্নবান হওয়ার জন্য আমি বিগডেসিমাল.কম.প্যারিটো (বিগডিসিমাল) পদ্ধতিটি ব্যবহার করে অভিজ্ঞ না হয়ে কেবল আরও যুক্ত করতে চেয়েছিলাম । সুতরাং, উদাহরণস্বরূপ ...

  • new BigDecimal(0.8)এমন BigDecimalমান দিয়ে একটি উদাহরণ তৈরি করবে যা হুবহু নয়0.8 এবং যার স্কেল 50+ রয়েছে,
  • new BigDecimal("0.8")একটি তৈরি করবে BigDecimalএকটি মান যা দিয়ে উদাহরণস্বরূপ হয় ঠিক 0.8এবং যা 1 এর স্কেলে হয়েছে

... এবং বিগডিসিমাল ডটকমপিয়ারটো (বিগডিসিমাল) পদ্ধতি অনুসারে দু'টিকে অসম বলে বিবেচিত হবে কারণ স্কেল কয়েক দশমিক স্থানে সীমাবদ্ধ না থাকলে তাদের মান অসম হয়।

প্রথমত, কনস্ট্রাক্টরের চেয়ে কনস্ট্রাক্টর বা পদ্ধতিটি BigDecimalদিয়ে আপনার দৃষ্টান্ত তৈরি করতে সাবধান হন । দ্বিতীয়ত, নোট করুন যে আপনি বিগডিসিমাল.সেটস্কেল (ইন্ট নিউস্কেল, রাউন্ডিংমোড রাউন্ডিংমড) পদ্ধতির মাধ্যমে তুলনা করার আগে বিগডিসিমাল উদাহরণগুলির স্কেল সীমাবদ্ধ করতে পারেন ।BigDecimal(String val)BigDecimal.valueOf(double val)BigDecimal(double val)


0

ব্যবহার com.ibm.etools.marshall.util.BigDecimalRange আইবিএম এক বর্গ util যদি তুলনা করতে পারবেন BigDecimal সীমার মধ্যে।

boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.