Arbitrary Precision Numbers বা অগণিত সঠিকতা সম্পন্ন সংখ্যা হল এমন সংখ্যা যা প্রথাগত int, long বা double টাইপের সীমার বাইরে গিয়ে বড় বা ছোট হতে পারে। Java তে এই ধরনের সংখ্যাগুলির জন্য BigInteger এবং BigDecimal ক্লাস রয়েছে, যা arbitrary precision (অসীম সঠিকতা) সমর্থন করে।
এখানে আলোচনা করা হবে BigInteger এবং BigDecimal এর মধ্যে তুলনা করার পদ্ধতি, বিশেষ করে compareTo() এবং equals() মেথড ব্যবহার করে।
1. BigInteger এবং BigDecimal এর মধ্যে তুলনা (Comparison)
BigInteger এবং BigDecimal উভয়েই immutable (অপরিবর্তনীয়) এবং arbitrary-precision (অসীম সঠিকতা) সম্পন্ন ক্লাস। যেহেতু BigInteger কেবল পূর্ণসংখ্যার (integer) জন্য এবং BigDecimal দশমিক সংখ্যার (decimal) জন্য ব্যবহৃত হয়, তাদের মধ্যে তুলনা করার সময় কিছু পার্থক্য রয়েছে।
compareTo() এবং equals() মেথড উভয়েই সংখ্যা তুলনা করতে ব্যবহৃত হয়, তবে তাদের মধ্যে পার্থক্য আছে।
compareTo() মেথড:
compareTo() মেথডটি দুটি BigInteger বা BigDecimal অবজেক্টের মধ্যে তুলনা করে এবং এটি একটি পূর্ণসংখ্যা প্রদান করে:
0: যদি দুটি মান সমান হয়।-1: যদি প্রথম মানটি দ্বিতীয়টির থেকে ছোট হয়।1: যদি প্রথম মানটি দ্বিতীয়টির থেকে বড় হয়।
এটি BigInteger বা BigDecimal অবজেক্টের মধ্যে তুলনা করার জন্য সবচেয়ে সাধারণ এবং নির্ভুল উপায়।
compareTo() এর উদাহরণ:
import java.math.BigInteger;
public class BigIntegerComparisonExample {
public static void main(String[] args) {
BigInteger num1 = new BigInteger("123456789123456789");
BigInteger num2 = new BigInteger("987654321987654321");
int comparisonResult = num1.compareTo(num2);
if (comparisonResult == 0) {
System.out.println("num1 is equal to num2");
} else if (comparisonResult < 0) {
System.out.println("num1 is smaller than num2");
} else {
System.out.println("num1 is greater than num2");
}
}
}
আউটপুট:
num1 is smaller than num2
equals() মেথড:
equals() মেথডটি দুইটি BigInteger বা BigDecimal অবজেক্টের মানের তুলনা করে এবং এটি একটি boolean মান প্রদান করে:
true: যদি দুটি মান সমান হয়।false: যদি দুটি মান সমান না হয়।
এটি দুটি অবজেক্টের মানের সঠিকতা পরীক্ষা করে, কিন্তু এর মধ্যে টাইপের কোনো পার্থক্য থাকলে তা গ্রহণ করবে না। অর্থাৎ, BigInteger এবং BigDecimal এর মধ্যে equals() কাজ করবে না, যদি একটির সঠিকতা integer (পূর্ণসংখ্যা) হিসেবে এবং অন্যটির decimal (ডেসিমাল) হিসেবে নির্ধারণ করা থাকে।
equals() এর উদাহরণ:
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigDecimalComparisonExample {
public static void main(String[] args) {
BigDecimal decimal1 = new BigDecimal("123.45");
BigDecimal decimal2 = new BigDecimal("123.45");
// Compare using equals()
boolean areEqual = decimal1.equals(decimal2);
System.out.println("Are the BigDecimals equal? " + areEqual);
// BigInteger comparison
BigInteger integer1 = new BigInteger("12345");
BigInteger integer2 = new BigInteger("12345");
// Compare BigIntegers using equals()
boolean areIntegersEqual = integer1.equals(integer2);
System.out.println("Are the BigIntegers equal? " + areIntegersEqual);
}
}
আউটপুট:
Are the BigDecimals equal? true
Are the BigIntegers equal? true
2. BigInteger এবং BigDecimal এর মধ্যে তুলনা:
BigInteger এবং BigDecimal দুইটি আলাদা ক্লাস এবং তাদের মানের ধরনও আলাদা, BigInteger কেবলমাত্র পূর্ণসংখ্যার জন্য এবং BigDecimal দশমিক সংখ্যা জন্য ব্যবহৃত হয়। তাই BigInteger এবং BigDecimal এর মধ্যে সরাসরি তুলনা করা সম্ভব নয়, কারণ তাদের মধ্যে টাইপের পার্থক্য রয়েছে।
Best Practice:
- যদি
BigIntegerএবংBigDecimalএর মধ্যে তুলনা করতে হয়, তবে প্রথমে একই টাইপে রূপান্তর করতে হবে।
BigInteger থেকে BigDecimal এ রূপান্তর:
import java.math.BigDecimal;
import java.math.BigInteger;
public class ConversionExample {
public static void main(String[] args) {
BigInteger bigInt = new BigInteger("123456789123456789");
// Convert BigInteger to BigDecimal
BigDecimal bigDecimal = new BigDecimal(bigInt);
// Now compare the BigDecimal with another BigDecimal
BigDecimal otherDecimal = new BigDecimal("123456789123456789.00");
if (bigDecimal.compareTo(otherDecimal) == 0) {
System.out.println("The values are equal.");
} else {
System.out.println("The values are different.");
}
}
}
BigDecimal থেকে BigInteger এ রূপান্তর:
import java.math.BigDecimal;
import java.math.BigInteger;
public class ConversionExample {
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("123456789123456789.00");
// Convert BigDecimal to BigInteger (removes decimal part)
BigInteger bigInt = bigDecimal.toBigInteger();
// Now compare the BigInteger with another BigInteger
BigInteger otherBigInt = new BigInteger("123456789123456789");
if (bigInt.compareTo(otherBigInt) == 0) {
System.out.println("The values are equal.");
} else {
System.out.println("The values are different.");
}
}
}
BigIntegerএবংBigDecimalএর মধ্যে তুলনা করার জন্যcompareTo()মেথড ব্যবহার করা উচিত।equals()মেথডটি দুটি মানের সঠিকতা (values) পরীক্ষা করে, কিন্তু টাইপের পার্থক্য থাকলে এটি false প্রদান করতে পারে।BigIntegerএবংBigDecimalএর মধ্যে তুলনা করার আগে, একই টাইপে রূপান্তর করা উচিত।BigDecimalএবংBigIntegerএর মধ্যে তুলনা করার সময় টাইপের সঠিকতা এবং মানের গুরুত্ব প্রদান করতে হবে।
Read more