उदाहरण के लिए मेरे पास वेरिएबल 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
वास्तव में सकारात्मक और नकारात्मक दोनों संख्याओं के लिए छंटनी का प्रभाव पड़ता है। जैसा कि डॉक में उदाहरण तालिका में देखा गया है ।
बिट ओल्ड फोरम, उपरोक्त उत्तर में से किसी ने भी सकारात्मक और नकारात्मक दोनों मूल्यों के लिए काम नहीं किया (मेरा मतलब है कि गणना के लिए और सिर्फ राउंडिंग के बिना ट्रंकेट करना है)। जावा लिंक में एन से दशमलव स्थानों के लिए एक नंबर को गोल करने के लिए कैसे
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
हुंद्रेत जगह
उदाहरण:
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 होगा दौर में दसवां स्थान, 2 को सैकड़ा , और इतने पर करने के लिए (0 राउंड वाले जगह है, और दसियों नकारात्मक एक , आदि।)
unroundedNumber
में बड़े होंगे। यह प्रश्न में उदाहरण के लिए काम कर सकता है, लेकिन किसी भी समाधान के लिए एक सामान्य समाधान काम करना चाहिए double
।
एक स्ट्रिंग के रूप में तैयार करना और वापस डबल में परिवर्तित करना मुझे लगता है कि आपको इच्छित परिणाम देगा।
दोहरा मूल्य गोल (), फर्श () या छत () नहीं होगा।
इसके लिए एक त्वरित सुधार हो सकता है:
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
आप प्रदर्शन प्रयोजनों के लिए sValue या गणना के लिए newValue का उपयोग कर सकते हैं।
आप कार्य को पूरा करने के लिए NumberFormat क्लास ऑब्जेक्ट का उपयोग कर सकते हैं।
// 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));
}
एक त्वरित जाँच Math.floor विधि का उपयोग करना है। मैंने नीचे दो या कम दशमलव स्थानों के लिए एक डबल जाँचने के लिए एक विधि बनाई:
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
अच्छी तरह से यह थोड़ा अजीब हो सकता है, लेकिन मुझे लगता है कि यह आपकी समस्या को हल कर सकता है :)