2009-12-11 11 views
5

को मेरे उत्तर को निकटतम 10 वीं तक पहुंचने की आवश्यकता है।गोल दशमलव से निकटतम 10 वीं

double finalPrice = everyMile + 2.8; 
    DecimalFormat fmt = new DecimalFormat("0.00"); 
    this.answerField.setText("£" + fmt.format(finalPrice) + " Approx"); 

उपरोक्त कोड निकटतम 10 वें स्थान पर एक पूर्ण संख्या को गोल करता है हालांकि यह दशमलव के चारों ओर नहीं होता है। उदाहरण 2.44 को 2.40

+2

seconding जॉन स्कीट के अंतिम टिप्पणी, कृपया ध्यान रखें कि ** कोई ** संख्या x.1, एक्स के रूप में दशमलव में लिखा है। 2, x.3, x.4, x.6, x.7, x.8, या x.9 बिल्कुल फ़्लोटिंग-पॉइंट नंबर के रूप में दर्शाया गया है। –

+0

मुझे समझ में नहीं आया कि आपने क्या कहा –

+3

इसे समझने के लिए समय लें क्योंकि यह महत्वपूर्ण है। –

उत्तर

9

बदलें थोड़ा कड़ी मेहनत से कोड अंतिम शून्य करने के लिए पैटर्न:

double finalPrice = 2.46; 
DecimalFormat fmt = new DecimalFormat("0.0'0'"); 
System.out.println("£" + fmt.format(finalPrice) + " Approx"); 

अब, अगर आप वास्तविक दुनिया पैसे से छेड़छाड़ कर रहे हैं, तो आप बेहतर डबल का उपयोग नहीं है, लेकिन int या BigInteger चाहते।

+0

मैजिकल। लॉल काम किया। तो '0' कहकर इसका मतलब है कि अंतिम संख्या के रूप में भौतिक रूप से चिपकना 0 चाहे कोई फर्क नहीं पड़ता? –

+0

हां, इसका मतलब यह है कि। – Jerome

+0

मीठा, आपकी मदद के लिए धन्यवाद। मैंने एक ही मंच को एक अलग मंच में पोस्ट किया, 4 घंटों के बाद उन्होंने कथित तौर पर मुझे Google पर reffered। (जो मैंने पहले कोशिश की थी) आप लोग जहां सुपर फास्ट लॉल –

10

पर BigDecimal का उपयोग करना चाहिए।

आप वास्तव में, वास्तव में मौद्रिक मूल्यों के लिए बाइनरी फ़्लोटिंग पॉइंट का उपयोग नहीं करना चाहते हैं।

संपादित करें: round() आपको दशमलव स्थानों को निर्दिष्ट करने की अनुमति नहीं देता है, केवल महत्वपूर्ण आंकड़े। यहाँ कुछ हद तक एक बारीकियों तकनीक है, लेकिन यह (यह मानते हुए आप काटना चाहते हैं, मूल रूप से) काम करता है:

import java.math.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     BigDecimal bd = new BigDecimal("20.44"); 
     bd = bd.movePointRight(1); 
     BigInteger floor = bd.toBigInteger(); 
     bd = new BigDecimal(floor).movePointLeft(1); 
     System.out.println(bd); 
    } 
} 

मैं वहाँ ऐसा करने का एक सरल तरीका है आशा करना चाहते हैं ...

+0

@ पीटर के जवाब में सरल और तेज़ तरीका दिया गया था। – Vadzim

+1

@ वाडज़िम: वह 'बिगडेसिमल (डबल)' कन्स्ट्रक्टर को कॉल कर रहा है, जो कि शायद ही कभी एक अच्छा विचार आईएमओ है। और हम अभी भी नहीं जानते कि ओपी राउंडिंग बनाम छंटनी के मामले में क्या करना चाहता है। लेकिन हे, यह कई विकल्प होना अच्छा है ... –

0

संपादित

इस प्रयास करें:

double d = 25.642; 
String s = String.format("£ %.2f", Double.parseDouble(String.format("%.1f", d).replace(',', '.'))); 
System.out.println(s); 

मैं जानता हूँ कि यह एक बेवकूफ तरीका है, लेकिन यह काम करता है।

+0

क्षमा करें, यह काम नहीं करता –

6

यह आउटपुट 2.40

BigDecimal bd = new BigDecimal(2.44); 
System.out.println(bd.setScale(1,RoundingMode.HALF_UP).setScale(2)); 
1

निम्नलिखित का प्रयास करें:

double finalPriceRoundedToNearestTenth = Math.round(10.0 * finalPrice)/10.0; 
संबंधित मुद्दे