2009-08-20 3 views
9

में स्ट्रिंग.फॉर्मैट ("%। 2f", डबलवैल्यू) में राउंड ऑफ को रोकें। मैं String.format("%.2f", doubleValue); को केवल इसे छीनने के बजाय गोलाकार (गोल आधा एल्गोरिदम) से कैसे रोकूं?जावा

उदा।

doubleValue = 123.459 
स्वरूपण के बाद

,

doubleValue = 123.46 

मैं सिर्फ पिछले अंक अभी नहीं करना चाहते,

123.45 

मुझे पता है कि यह करने के लिए अन्य तरीके हैं, मैं सिर्फ यह अगर जानना चाहते हैं String.format का उपयोग कर संभव है।

उत्तर

12

तुम हमेशा राउंडिंग मोड सेट कर सकते हैं:

http://java.sun.com/javase/6/docs/api/java/math/RoundingMode.html

और फिर String.Format() का उपयोग HALF_EVEN डिफ़ॉल्ट रूप से प्रयोग किया जाता है, लेकिन आप छत

को बदल सकते हैं कोई अन्य इतना लचीला दृष्टिकोण नहीं होगा (लेकिन यह वह नहीं है जिसे आपने पूछा था):

DecimalFormat df = new DecimalFormat("###.##"); 
df.format(123.459); 
+0

यदि दशमलव बिंदु के बाईं ओर वाले अंक 3 अंकों से अधिक हो सकते हैं तो आपको क्या करना चाहिए? साथ ही, क्या यह एक डबल ऑब्जेक्ट बनाने के बजाय इसे एक डबल चर पर सीधे उपयोग करना संभव है? –

+1

भविष्य का संदर्भ यह गलत है। यदि दशमलव डिग्री 6 हो जाती है तो राउंड आधा अप का उपयोग किया जाता है, अन्य बुद्धिमान HALF_EVEN गोलिंग का उपयोग किया जाता है। मुझे यह बेतुका लगता है! – Chad

3
doubleValue = 123.459 
doubleValue = Math.ceil(doubleValue*100)/100; 
+3

आप काटना चाहते हैं, नहीं आप 'सकारात्मक मूल्यों के लिए floor' उपयोग करना चाहते हैं, और' नकारात्मक लोगों के लिए ceil' ? – Rob

5

ऐसा लगता है कि उत्तर एक बड़ी वसा नहीं है। http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec

मैं यह अजीब वे कहते हैं कि, आप RoundingMode स्थापित करने के लिए के बाद से NumberFormatter की अनुमति देता है कर, उसे ढूंढने "तो मूल्य दौर आधा कलन विधि का उपयोग बढ़ा दिया जाएगा"। लेकिन जैसा कि आप कहते हैं, ऐसा करने के अन्य तरीके हैं। जाहिर है कि आपके मूल्य से पहले .005 घटाया जा रहा है।

+1

यह स्वीकार्य उत्तर होना चाहिए। @ DimitryK के उत्तर का तात्पर्य है कि आप स्ट्रिंग.फॉर्मैट() को गोल के बजाय छंटनी करने के लिए प्राप्त कर सकते हैं, जो असत्य है। – Aranda

-1

उपयोग String.Format ("% 2f।", DoubleValue - .005)

+4

इस दृष्टिकोण से सावधान रहें! 'String.format ("%। 2f ", 1.05 - .005) 'परिणाम' 1.04' में, संभवतः फ्लोटिंग पॉइंट त्रुटियों के कारण। – Aranda