উদাহরণস্বরূপ আমার কাছে ভেরিয়েবল 3.545555555 রয়েছে, যা আমি কেবল 3.54 এ কাটাতে চাই।
উত্তর:
যদি আপনি এটি প্রদর্শনের উদ্দেশ্যে করতে চান তবে ব্যবহার করুন java.text.DecimalFormat
:
new DecimalFormat("#.##").format(dblVar);
আপনার যদি গণনার জন্য এটির প্রয়োজন হয়, ব্যবহার করুন java.lang.Math
:
Math.floor(value * 100) / 100;
floor
করতে ব্যবহার করা কেবল ইতিবাচক মানগুলির জন্য কাজ করে।
RoundingMode.DOWN
হিসাবে RoudingMode.FLOOR
সবসময় নেতিবাচক অনন্ত প্রতি চক্রের।
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);
উপলব্ধ চেক RoundingMode
এবং DecimalFormat
।
DOWN
ইতিবাচক এবং negativeণাত্মক উভয় সংখ্যার জন্য কাটাকাটির প্রভাব আছে। হিসাবে উদাহরণ টেবিল দেখা ডক ।
বিট ওল্ড ফোরাম, উপরের উত্তরের কোনওটিই ইতিবাচক এবং নেতিবাচক মান উভয়ের জন্যই কাজ করেনি (আমি গণনাটি বোঝাতে চাইছি এবং গোলটি না করে কেবল কাটা কাটা)। জাভা লিঙ্কের দশমিক স্থানে কোনও সংখ্যাকে কীভাবে গোল করবেন From
private static BigDecimal truncateDecimal(double x,int numberofDecimals)
{
if ( x > 0) {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_FLOOR);
} else {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_CEILING);
}
}
এই পদ্ধতিটি আমার পক্ষে ভাল কাজ করেছিল।
System.out.println(truncateDecimal(0, 2));
System.out.println(truncateDecimal(9.62, 2));
System.out.println(truncateDecimal(9.621, 2));
System.out.println(truncateDecimal(9.629, 2));
System.out.println(truncateDecimal(9.625, 2));
System.out.println(truncateDecimal(9.999, 2));
System.out.println(truncateDecimal(-9.999, 2));
System.out.println(truncateDecimal(-9.0, 2));
ফলাফল:
0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00
নোট প্রথম যে একটি double
একটি বাইনারি ভগ্নাংশ এবং সত্যিই নেই আছে দশমিক স্থান।
আপনার যদি দশমিক স্থানের প্রয়োজন হয় তবে একটি ব্যবহার করুন BigDecimal
, যার setScale()
কাটা কাটা পদ্ধতি রয়েছে বা DecimalFormat
একটি পাওয়ার জন্য ব্যবহার করুন String
।
যদি যাই হোক না কেন, আপনি যদি এমন কোনও ব্যবহার করতে না চান তবে আপনি এটি কেটে ফেলতে একটি BigDecimal
কাস্ট করতে পারেন ।double
int
আপনাকে অগ্রভাগ ছাঁটিয়া করতে চান, বেশী স্থান:
int
করতে দশমাংশ জায়গা:
int
double
Hundreths জায়গা
উদাহরণ:
static double truncateTo( double unroundedNumber, int decimalPlaces ){
int truncatedNumberInt = (int)( unroundedNumber * Math.pow( 10, decimalPlaces ) );
double truncatedNumber = (double)( truncatedNumberInt / Math.pow( 10, decimalPlaces ) );
return truncatedNumber;
}
এই উদাহরণে, decimalPlaces
স্থান সংখ্যা হবে অতীত বেশী আপনি যেতে চান স্থান, তাই 1 would রাউন্ডে দশমাংশ স্থান, 2 hundredths , ইত্যাদি (0 চক্রের বেশী জায়গা এবং দশ নেতিবাচক এক ইত্যাদি)
unroundedNumber
যথেষ্ট বড় হলে কার্যকরভাবে এলোমেলো সংখ্যাগুলি কী ফলাফল করবে are এটি প্রশ্নের উদাহরণের জন্য কাজ করতে পারে তবে সাধারণ সমাধানটি যে কোনওর জন্য কাজ করা উচিত double
।
একটি স্ট্রিং হিসাবে গঠন এবং ডাবল ফিরে রূপান্তর আমার মনে হয় যে আপনি চান ফলাফল আপনাকে দিতে হবে।
দ্বিগুণ মান গোল (), তল () বা সিল () হবে না।
এটির জন্য দ্রুত সমাধানটি হ'ল:
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
আপনি প্রদর্শনের উদ্দেশ্যে sValue বা গণনার জন্য নতুন ভ্যালু ব্যবহার করতে পারেন।
টাস্কটি সম্পাদনের জন্য আপনি নাম্বার ফর্ম্যাট ক্লাস অবজেক্টটি ব্যবহার করতে পারেন।
// Creating number format object to set 2 places after decimal point
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setGroupingUsed(false);
System.out.println(nf.format(precision));// Assuming precision is a double type variable
আমি যে পদ্ধতিটি ব্যবহার করি তা এখানে:
double a=3.545555555; // just assigning your decimal to a variable
a=a*100; // this sets a to 354.555555
a=Math.floor(a); // this sets a to 354
a=a/100; // this sets a to 3.54 and thus removing all your 5's
এটিও করা যেতে পারে:
a=Math.floor(a*100) / 100;
সম্ভবত নিম্নলিখিত:
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
একটি দ্রুত চেক ম্যাথ.ফ্লুর পদ্ধতিটি ব্যবহার করা। আমি নীচে দুই বা তার চেয়ে কম দশমিক জায়গার জন্য একটি ডাবল যাচাই করার জন্য একটি পদ্ধতি তৈরি করেছি:
public boolean checkTwoDecimalPlaces(double valueToCheck) {
// Get two decimal value of input valueToCheck
double twoDecimalValue = Math.floor(valueToCheck * 100) / 100;
// Return true if the twoDecimalValue is the same as valueToCheck else return false
return twoDecimalValue == valueToCheck;
}
আমি মণির একটি সামান্য পরিবর্তিত সংস্করণ আছে ।
private static BigDecimal truncateDecimal(final double x, final int numberofDecimals) {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_DOWN);
}
public static void main(String[] args) {
System.out.println(truncateDecimal(0, 2));
System.out.println(truncateDecimal(9.62, 2));
System.out.println(truncateDecimal(9.621, 2));
System.out.println(truncateDecimal(9.629, 2));
System.out.println(truncateDecimal(9.625, 2));
System.out.println(truncateDecimal(9.999, 2));
System.out.println(truncateDecimal(3.545555555, 2));
System.out.println(truncateDecimal(9.0, 2));
System.out.println(truncateDecimal(-9.62, 2));
System.out.println(truncateDecimal(-9.621, 2));
System.out.println(truncateDecimal(-9.629, 2));
System.out.println(truncateDecimal(-9.625, 2));
System.out.println(truncateDecimal(-9.999, 2));
System.out.println(truncateDecimal(-9.0, 2));
System.out.println(truncateDecimal(-3.545555555, 2));
}
আউটপুট:
0.00
9.62
9.62
9.62
9.62
9.99
9.00
3.54
-9.62
-9.62
-9.62
-9.62
-9.99
-9.00
-3.54
এটি আমার পক্ষে কাজ করেছে:
double input = 104.8695412 //For example
long roundedInt = Math.round(input * 100);
double result = (double) roundedInt/100;
//result == 104.87
আমি ব্যক্তিগতভাবে এই সংস্করণটি পছন্দ করি কারণ এটি স্ট্রিং (বা অনুরূপ) রূপান্তর না করে এবং পরে এটি ফর্ম্যাট করার পরিবর্তে এটি সংখ্যাসূচকভাবে গোলটি সম্পাদন করে।
//if double_v is 3.545555555
String string_v= String.valueOf(double_v);
int pointer_pos = average.indexOf('.');//we find the position of '.'
string_v.substring(0, pointer_pos+2));// in this way we get the double with only 2 decimal in string form
double_v = Double.valueOf(string_v);//well this is the final result
আচ্ছা এটি কিছুটা বিশ্রী হতে পারে তবে আমি মনে করি এটি আপনার সমস্যার সমাধান করতে পারে :)