BigInteger এবং BigDecimal দুটি গুরুত্বপূর্ণ ক্লাস যা Java.math প্যাকেজে পাওয়া যায় এবং যেগুলি খুব বড় সংখ্যার গাণিতিক অপারেশন সম্পাদন করার জন্য ব্যবহৃত হয়। তবে, তারা আলাদা উদ্দেশ্য এবং কাজের জন্য ডিজাইন করা হয়েছে:
BigInteger: এটি শুধুমাত্র পূর্ণসংখ্যা (integer) ধারণ করে, অর্থাৎ এটি অগণিত দৈর্ঘ্যের পূর্ণসংখ্যা কাজের জন্য ব্যবহৃত হয়।BigDecimal: এটি দশমিক সংখ্যা (floating-point numbers) ধারণ করে, অর্থাৎ এটি অগণিত দৈর্ঘ্যের দশমিক সংখ্যার কাজের জন্য ব্যবহৃত হয়।
যখন BigInteger এবং BigDecimal এর মধ্যে রূপান্তর করার প্রয়োজন হয়, তখন কিছু পদ্ধতি রয়েছে। এখানে BigInteger থেকে BigDecimal এবং BigDecimal থেকে BigInteger তে রূপান্তর করার পদ্ধতিগুলি আলোচনা করা হবে।
1. BigInteger থেকে BigDecimal এ রূপান্তর:
আপনি যদি একটি BigInteger অবজেক্টকে BigDecimal এ রূপান্তর করতে চান, তবে BigDecimal(BigInteger) কনস্ট্রাক্টর ব্যবহার করতে পারেন।
উদাহরণ: BigInteger থেকে BigDecimal এ রূপান্তর:
import java.math.BigInteger;
import java.math.BigDecimal;
public class BigIntegerToBigDecimal {
public static void main(String[] args) {
// Create a BigInteger object
BigInteger bigInt = new BigInteger("123456789012345678901234567890");
// Convert BigInteger to BigDecimal
BigDecimal bigDecimal = new BigDecimal(bigInt);
// Print the BigDecimal
System.out.println("BigDecimal from BigInteger: " + bigDecimal);
}
}
ব্যাখ্যা:
new BigDecimal(bigInt):BigIntegerঅবজেক্টকেBigDecimalতে রূপান্তর করা হয়েছে।
আউটপুট:
BigDecimal from BigInteger: 123456789012345678901234567890
2. BigDecimal থেকে BigInteger এ রূপান্তর:
যদি আপনার BigDecimal অবজেক্ট থেকে একটি BigInteger অবজেক্টে রূপান্তর করার প্রয়োজন হয়, তবে BigDecimal.toBigInteger() বা BigDecimal.toBigIntegerExact() মেথড ব্যবহার করতে পারেন।
toBigInteger(): এটিBigDecimalথেকেBigIntegerরূপান্তর করে, তবে দশমিক অংশ বাদ দিয়ে।toBigIntegerExact(): এটিBigDecimalথেকেBigIntegerরূপান্তর করে, তবে যদি ডেসিমাল অংশ থাকে তবে ArithmeticException ছুড়ে দিবে।
উদাহরণ: BigDecimal থেকে BigInteger এ রূপান্তর:
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigDecimalToBigInteger {
public static void main(String[] args) {
// Create a BigDecimal object
BigDecimal bigDecimal = new BigDecimal("123456789012345678901234567890.99");
// Convert BigDecimal to BigInteger
BigInteger bigInt = bigDecimal.toBigInteger(); // This will truncate the decimal part
// Print the BigInteger
System.out.println("BigInteger from BigDecimal: " + bigInt);
// If we want to ensure there is no decimal part, use toBigIntegerExact()
try {
BigInteger bigIntExact = bigDecimal.toBigIntegerExact(); // Throws exception if decimal part exists
System.out.println("BigInteger (exact) from BigDecimal: " + bigIntExact);
} catch (ArithmeticException e) {
System.out.println("Error: " + e.getMessage()); // If decimal part is present
}
}
}
ব্যাখ্যা:
toBigInteger():BigDecimalএর দশমিক অংশ বাদ দিয়েBigIntegerতে রূপান্তরিত হবে।toBigIntegerExact(): যদিBigDecimalএর দশমিক অংশ থাকে তবে এটিArithmeticExceptionছুড়ে দেবে।
আউটপুট:
BigInteger from BigDecimal: 123456789012345678901234567890
Error: Rounding necessary
3. Precision and Rounding during Conversion
যখন আপনি BigDecimal থেকে BigInteger এ রূপান্তর করেন, তখন ডেসিমাল পয়েন্ট কাটা হয়। কখনও কখনও, এই কাটার কারণে Precision হারিয়ে যেতে পারে, যা কিছু ক্ষেত্রে সমস্যা সৃষ্টি করতে পারে।
Best Practice:
BigDecimal.setScale()ব্যবহার করে, আপনি রূপান্তরের পূর্বে Precision বা RoundingMode নির্ধারণ করতে পারেন।BigDecimal.stripTrailingZeros()ব্যবহার করে আপনি অতিরিক্ত শূন্যগুলিকে মুছে ফেলতে পারেন।
উদাহরণ: Precision ধরে রেখে রূপান্তর করা:
import java.math.BigDecimal;
import java.math.BigInteger;
public class PrecisionHandling {
public static void main(String[] args) {
// Create a BigDecimal object
BigDecimal bigDecimal = new BigDecimal("12345.678900");
// Strip trailing zeros
bigDecimal = bigDecimal.stripTrailingZeros();
// Convert to BigInteger
BigInteger bigInt = bigDecimal.toBigInteger();
// Print the BigInteger
System.out.println("BigInteger from BigDecimal with stripped zeros: " + bigInt);
}
}
আউটপুট:
BigInteger from BigDecimal with stripped zeros: 12345
BigIntegerথেকেBigDecimalরূপান্তর করতেBigDecimal(BigInteger)কনস্ট্রাক্টর ব্যবহার করা হয়।BigDecimalথেকেBigIntegerরূপান্তর করতেBigDecimal.toBigInteger()বাBigDecimal.toBigIntegerExact()ব্যবহার করা হয়।- যদি ডেসিমাল অংশ থাকে, তবে এটি
BigIntegerএ রূপান্তর করার সময় হারিয়ে যেতে পারে। - Precision এবং RoundingMode এর ক্ষেত্রে সাবধানতা অবলম্বন করা উচিত, যেমন
BigDecimal.setScale()এবংstripTrailingZeros()ব্যবহার।
এই রূপান্তরের মাধ্যমে, আপনি BigInteger এবং BigDecimal এর মধ্যে সহজে রূপান্তর করতে পারেন এবং প্রয়োজন অনুযায়ী গণনা করতে পারেন।
BigInteger এবং BigDecimal উভয়ই java.math প্যাকেজের ক্লাস, তবে তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। BigInteger শুধু পূর্ণসংখ্যা (integer) ধারণ করে, অন্যদিকে BigDecimal দশমিক সংখ্যার (floating-point numbers) জন্য ব্যবহৃত হয় এবং এটি যেকোনো পরিমাণ সঠিকতার সাথে গণনা করতে সক্ষম।
যেহেতু BigInteger শুধুমাত্র পূর্ণসংখ্যা ধরে এবং BigDecimal দশমিক বা ভগ্নাংশ ধারণ করতে সক্ষম, তাই কখনও কখনও BigInteger কে BigDecimal এ রূপান্তর করতে হয় যখন আমাদের দশমিক মান বা সঠিকতা প্রয়োজন।
BigInteger থেকে BigDecimal এ রূপান্তর করা:
BigInteger ক্লাস থেকে BigDecimal ক্লাসে রূপান্তর করার জন্য BigDecimal(BigInteger) কনস্ট্রাক্টর ব্যবহার করা হয়। এটি একটি BigInteger অবজেক্টকে BigDecimal অবজেক্টে রূপান্তর করে, তবে মনে রাখতে হবে যে এই রূপান্তর পূর্ণসংখ্যা থেকে দশমিক সংখ্যা তে যাবে, এবং আপনি যেকোনো প্রয়োজনীয় সঠিকতা (scale) সেট করতে পারেন।
BigInteger কে BigDecimal এ রূপান্তর করার উদাহরণ:
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigIntegerToBigDecimalConversion {
public static void main(String[] args) {
// Create a BigInteger object
BigInteger bigInteger = new BigInteger("123456789012345678901234567890");
// Convert BigInteger to BigDecimal
BigDecimal bigDecimal = new BigDecimal(bigInteger);
// Print the BigDecimal value
System.out.println("BigDecimal from BigInteger: " + bigDecimal);
// You can also specify scale (decimal places)
BigDecimal bigDecimalWithScale = new BigDecimal(bigInteger).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("BigDecimal with scale: " + bigDecimalWithScale);
}
}
ব্যাখ্যা:
BigDecimal(BigInteger): এটি একটিBigIntegerঅবজেক্টকেBigDecimalএ রূপান্তরিত করে। তবে, এটি শুধুমাত্র পূর্ণসংখ্যা ধারণ করবে, অর্থাৎ দশমিকের পর কোনো স্থান থাকবে না।setScale(int scale, RoundingMode roundingMode): এখানেsetScale(2, BigDecimal.ROUND_HALF_UP)ব্যবহার করে আমরা BigDecimal অবজেক্টে দুইটি দশমিক স্থান নির্ধারণ করেছি এবং গোলকরণ মোডও নির্দিষ্ট করেছি।
আউটপুট:
BigDecimal from BigInteger: 123456789012345678901234567890
BigDecimal with scale: 123456789012345678901234567890.00
এখন একটি বাস্তব উদাহরণ দেখে নেওয়া যাক, যেখানে আপনি BigInteger থেকে BigDecimal তে রূপান্তর করবেন এবং এরপর তার সাথে গাণিতিক অপারেশন করবেন।
উদাহরণ: BigInteger থেকে BigDecimal রূপান্তর এবং গাণিতিক অপারেশন:
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigIntegerToBigDecimalOperations {
public static void main(String[] args) {
// Create a BigInteger object
BigInteger bigInteger = new BigInteger("987654321098765432109876543210");
// Convert BigInteger to BigDecimal
BigDecimal bigDecimal = new BigDecimal(bigInteger);
System.out.println("BigDecimal from BigInteger: " + bigDecimal);
// Perform some mathematical operations with BigDecimal
BigDecimal sum = bigDecimal.add(new BigDecimal("1000.50"));
BigDecimal difference = bigDecimal.subtract(new BigDecimal("500"));
BigDecimal product = bigDecimal.multiply(new BigDecimal("2.5"));
BigDecimal quotient = bigDecimal.divide(new BigDecimal("3"), 2, BigDecimal.ROUND_HALF_UP); // 2 decimal places
System.out.println("Sum: " + sum);
System.out.println("Difference: " + difference);
System.out.println("Product: " + product);
System.out.println("Quotient: " + quotient);
}
}
ব্যাখ্যা:
BigDecimal.add(BigDecimal): দুটিBigDecimalযোগ করার জন্য ব্যবহৃত হয়।BigDecimal.subtract(BigDecimal): দুটিBigDecimalএর মধ্যে বিয়োগ করার জন্য ব্যবহৃত হয়।BigDecimal.multiply(BigDecimal): দুটিBigDecimalগুণ করার জন্য ব্যবহৃত হয়।BigDecimal.divide(BigDecimal, int, RoundingMode):BigDecimalএর ভাগফল নির্ধারণের জন্য ব্যবহৃত হয় এবং রাউন্ডিং মোড এবং স্কেল (ডেসিমাল পয়েন্ট) প্রদান করা হয়।
আউটপুট:
BigDecimal from BigInteger: 987654321098765432109876543210
Sum: 987654321098765432109876544210.50
Difference: 987654321098765432109876542710
Product: 2469135802746913580274691358025.00
Quotient: 329218107032921807369958847403.33
- BigInteger থেকে BigDecimal এ রূপান্তর করার জন্য
BigDecimal(BigInteger)কনস্ট্রাক্টর ব্যবহার করুন। এটি বড় পূর্ণসংখ্যাকে দশমিক মানে রূপান্তর করতে সহায়ক। - আপনি
setScale()ব্যবহার করে BigDecimal এর স্কেল এবং রাউন্ডিং মোড নির্ধারণ করতে পারেন, যেমন কতটি দশমিক স্থান প্রযোজ্য হবে। - BigDecimal আপনাকে বড় সংখ্যার গাণিতিক অপারেশনগুলো (যোগফল, বিয়োগফল, গুণফল, ভাগফল) নির্ভুলভাবে করতে সহায়তা করে, যা সাধারণ
intবাlongএর থেকে অনেক বেশি সক্ষম।
BigDecimal এবং BigInteger হল দুটি গুরুত্বপূর্ণ ক্লাস যা Java.math প্যাকেজের অংশ এবং তাদের মধ্যে প্রধান পার্থক্য হল BigDecimal ক্লাস ডেসিমাল সংখ্যার সঠিক গণনা (যেমন আর্থিক হিসাব) করার জন্য ব্যবহৃত হয়, যখন BigInteger অন্তহীন পূর্ণসংখ্যা রেপ্রেজেন্ট করতে ব্যবহৃত হয়। কখনও কখনও আপনাকে BigDecimal কে BigInteger তে রূপান্তর করতে হতে পারে, বিশেষ করে যখন আপনি শুধুমাত্র পূর্ণসংখ্যা দরকার এবং দশমিকের স্থান উপেক্ষা করতে চান।
BigDecimal থেকে BigInteger তে রূপান্তর করার পদ্ধতি:
BigDecimal কে BigInteger তে রূপান্তর করতে, BigDecimal.toBigInteger() বা BigDecimal.toBigIntegerExact() মেথড ব্যবহার করা হয়। তবে, এগুলোর মধ্যে কিছু পার্থক্য রয়েছে:
toBigInteger(): এটি BigDecimal কে BigInteger তে রূপান্তর করে, কিন্তু যদি ডেসিমাল অংশ থাকে তবে এটি হালকা করে (ভগ্নাংশ সরিয়ে ফেলে)।toBigIntegerExact(): এটি BigDecimal এর মানের ভগ্নাংশ না থাকলে রূপান্তর করবে, কিন্তু যদি ভগ্নাংশ থাকে, তবেArithmeticExceptionছুড়ে দেবে।
উদাহরণ 1: BigDecimal থেকে BigInteger তে রূপান্তর (সাধারণ)
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigDecimalToBigIntegerExample {
public static void main(String[] args) {
// Create a BigDecimal object
BigDecimal bigDecimal = new BigDecimal("123.456");
// Convert BigDecimal to BigInteger (removes the decimal part)
BigInteger bigInteger = bigDecimal.toBigInteger();
System.out.println("BigInteger after conversion: " + bigInteger);
}
}
Output:
BigInteger after conversion: 123
ব্যাখ্যা:
bigDecimal.toBigInteger(): এখানে,BigDecimalএর দশমিক অংশটি সরিয়ে ফেলেছে এবং শুধুমাত্র পূর্ণসংখ্যা অংশ123রূপান্তরিত হয়েছে।
উদাহরণ 2: BigDecimal থেকে BigInteger তে রূপান্তর (Exact Method)
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigDecimalToBigIntegerExactExample {
public static void main(String[] args) {
// Create a BigDecimal object
BigDecimal bigDecimal = new BigDecimal("123.456");
try {
// Convert BigDecimal to BigInteger exactly (will throw exception if decimal part exists)
BigInteger bigInteger = bigDecimal.toBigIntegerExact();
System.out.println("BigInteger after exact conversion: " + bigInteger);
} catch (ArithmeticException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Output:
Error: Rounding necessary
ব্যাখ্যা:
toBigIntegerExact(): এটি ArithmeticException ছুড়ে দিয়েছে কারণBigDecimalএ দশমিক অংশ ছিল, এবং সঠিকভাবে রূপান্তর করা সম্ভব ছিল না।
উদাহরণ 3: BigDecimal থেকে BigInteger তে রূপান্তর (Negative Values)
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigDecimalToBigIntegerNegativeExample {
public static void main(String[] args) {
// Create a BigDecimal object with a negative value
BigDecimal bigDecimal = new BigDecimal("-123.456");
// Convert BigDecimal to BigInteger (removes the decimal part)
BigInteger bigInteger = bigDecimal.toBigInteger();
System.out.println("BigInteger after conversion: " + bigInteger);
}
}
Output:
BigInteger after conversion: -123
ব্যাখ্যা:
toBigInteger(): এটিBigDecimalএর নেতিবাচক মান-123.456থেকে দশমিক অংশ সরিয়ে দিয়ে-123রূপান্তর করেছে।
সারাংশ:
BigDecimal.toBigInteger(): এটিBigDecimalএর দশমিক অংশটি সরিয়ে দিয়ে পূর্ণসংখ্যা প্রদান করে। এটি arbitrary-precision পূর্ণসংখ্যা প্রদান করে।BigDecimal.toBigIntegerExact(): এটিBigDecimalএর রূপান্তরকে exact করতে প্রয়োগ করা হয়, এবং যদি ডেসিমাল অংশ থাকে তবে এটিArithmeticExceptionছুড়ে দেয়।
BigInteger এবং BigDecimal দুটি ক্লাস Java.math প্যাকেজের অংশ, যেগুলি বড় সংখ্যার সাথে কাজ করার জন্য ব্যবহৃত হয়। BigInteger ক্লাসটি বড় পূর্ণসংখ্যা (integers) পরিচালনা করতে ব্যবহৃত হয়, আর BigDecimal ক্লাসটি দশমিক সংখ্যা (decimals) নিয়ে কাজ করতে ব্যবহৃত হয়।
যখন আপনাকে BigInteger এবং BigDecimal এর মধ্যে কনভার্সন করতে হয়, তখন কিছু নির্দিষ্ট মেথড ব্যবহার করা হয়, যা আপনাকে এক ধরনের গাণিতিক সংখ্যাকে অন্য ধরনের গাণিতিক সংখ্যায় রূপান্তর করতে সাহায্য করে।
BigInteger থেকে BigDecimal এ কনভার্সন
BigInteger থেকে BigDecimal এ কনভার্সন করার জন্য, BigDecimal ক্লাসের কনস্ট্রাক্টর ব্যবহার করা হয়, যা একটি BigInteger কে BigDecimal এ রূপান্তর করে।
Syntax:
BigDecimal(BigInteger val)
Example:
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigIntegerToBigDecimalExample {
public static void main(String[] args) {
// Create a BigInteger object
BigInteger bigInt = new BigInteger("123456789012345678901234567890");
// Convert BigInteger to BigDecimal
BigDecimal bigDec = new BigDecimal(bigInt);
System.out.println("BigDecimal from BigInteger: " + bigDec);
}
}
Output:
BigDecimal from BigInteger: 123456789012345678901234567890
ব্যাখ্যা:
BigIntegerথেকেBigDecimal-এ কনভার্সন করতেBigDecimal(BigInteger val)কনস্ট্রাক্টর ব্যবহার করা হয়েছে।BigDecimalএখন পূর্ণসংখ্যার মানBigIntegerথেকে দশমিকের মান হিসেবে তৈরি হয়েছে, যদিও এখানে কোন দশমিক স্থান নেই।
BigDecimal থেকে BigInteger এ কনভার্সন
BigDecimal থেকে BigInteger এ কনভার্সন করার জন্য, BigDecimal ক্লাসের toBigInteger() মেথড ব্যবহার করা হয়। এই মেথডটি BigDecimal এর ইনটিজার অংশ বের করে BigInteger এ রূপান্তর করে।
Syntax:
BigInteger toBigInteger()
Example:
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigDecimalToBigIntegerExample {
public static void main(String[] args) {
// Create a BigDecimal object
BigDecimal bigDec = new BigDecimal("12345.6789");
// Convert BigDecimal to BigInteger
BigInteger bigInt = bigDec.toBigInteger();
System.out.println("BigInteger from BigDecimal: " + bigInt);
}
}
Output:
BigInteger from BigDecimal: 12345
ব্যাখ্যা:
BigDecimal.toBigInteger()মেথড ব্যবহার করেBigDecimalএর দশমিক স্থান বাদ দিয়ে শুধুমাত্র পূর্ণসংখ্যার অংশ রিটার্ন করেBigIntegerতে কনভার্সন করা হয়েছে।
BigDecimal থেকে BigInteger এ কনভার্সন (Round-off with scale)
যখন BigDecimal থেকে BigInteger কনভার্ট করা হয়, তখন ডেসিমাল পয়েন্টের পরে কিছু সংখ্যার অংশ বাদ পড়তে পারে। এই কারণে কিছু রাউন্ডিংয়ের প্রয়োজন হতে পারে। BigDecimal এর setScale() মেথড ব্যবহার করে রাউন্ডিং করা যেতে পারে।
Example with rounding:
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigDecimalToBigIntegerWithRoundingExample {
public static void main(String[] args) {
// Create a BigDecimal object with a decimal value
BigDecimal bigDec = new BigDecimal("12345.6789");
// Round off the decimal and convert to BigInteger
BigDecimal rounded = bigDec.setScale(0, BigDecimal.ROUND_HALF_UP);
BigInteger bigInt = rounded.toBigInteger();
System.out.println("Rounded BigInteger from BigDecimal: " + bigInt);
}
}
Output:
Rounded BigInteger from BigDecimal: 12346
ব্যাখ্যা:
setScale(0, BigDecimal.ROUND_HALF_UP)ব্যবহার করে দশমিক স্থানটি রাউন্ড করা হয়েছে, এবংtoBigInteger()মেথড ব্যবহার করেBigDecimalথেকেBigIntegerতে কনভার্ট করা হয়েছে। রাউন্ডিংয়ের কারণে 12345.6789 থেকে 12346 হয়েছে।
- BigInteger to BigDecimal Conversion:
BigIntegerথেকেBigDecimalএ কনভার্সন করার জন্যBigDecimal(BigInteger val)কনস্ট্রাক্টর ব্যবহার করা হয়।
- BigDecimal to BigInteger Conversion:
BigDecimalথেকেBigIntegerএ কনভার্সন করার জন্যtoBigInteger()মেথড ব্যবহার করা হয়, যা দশমিক স্থান বাদ দিয়ে শুধুমাত্র পূর্ণসংখ্যা রিটার্ন করে।
- Rounding Decimal Values:
- BigDecimal থেকে BigInteger কনভার্সন করার আগে যদি প্রয়োজন হয়, তবে
setScale()মেথড ব্যবহার করে রাউন্ডিং করা যেতে পারে, যা সঠিক পূর্ণসংখ্যা রিটার্ন করবে।
- BigDecimal থেকে BigInteger কনভার্সন করার আগে যদি প্রয়োজন হয়, তবে
BigDecimal এবং BigInteger ক্লাসের মধ্যে কনভার্সন আপনাকে বড় এবং সঠিক সংখ্যার সাথে গাণিতিক কাজ করার সুবিধা দেয়, এবং এগুলো অত্যন্ত গুরুত্বপূর্ণ যখন আপনাকে বড় সংখ্যার সাথে কাজ করতে হয় বা যখন সঠিকতা গুরুত্বপূর্ণ।
Read more