2012-01-17 8 views
20

यह प्रोग्राम काम करता है, सिवाय इसके कि जब एनजेर्स की संख्या 7 से अधिक हो, तो मुझे $ 14.9999999999999 9 8 जैसे उत्तर मिलेगा। 6 के लिए, उत्पादन 14.08 है। मैं 7 के गुणकों के लिए अपवाद कैसे ठीक करूं ताकि यह $ 14.99 जैसा कुछ प्रदर्शित करेगा?मैं डबल के लिए मुद्रित दशमलव की संख्या को कैसे सीमित करूं?

import java.util.Scanner; 
public class Homework_17 
{ 
private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs; 

public static void main(String[] args) 
    { 
    computeShippingCost(); 
    } 

    public static void computeShippingCost() 
    { 
    System.out.print("Enter a number of jars: "); 
    Scanner kboard = new Scanner (System.in); 
    nJars = kboard.nextInt(); 
    int nCartons = (nJars + 11)/12; 
    int totalOunces = (nJars * 21) + (nCartons * 25); 
    int lbs = totalOunces/16; 
    double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0; 

    System.out.print("$" + shippingCost); 
    } 
} 
+7

जैसा कि ऐसा लगता है कि यह होमवर्क है, मैं केवल एक संकेत देता हूं: * DecimalFormat क्लास का उपयोग करें। * –

+0

जावा द्वारा प्रदान की गई कक्षा का उपयोग करने में क्या समस्या है? यह कोई तीसरी पार्टी कक्षा नहीं है। –

+1

http://stackoverflow.com/questions/8819842/best-way-to-format-a-double-value-to-2-decimal-places –

उत्तर

37

उपयोग एक DecimalFormatter फ़ॉर्मेट करने के लिए DecimalFormat वर्ग का उपयोग करें:

double number = 0.9999999999999; 
DecimalFormat numberFormat = new DecimalFormat("#.00"); 
System.out.println(numberFormat.format(number)); 

आप "0.99" देंगे। आप कम या कम दशमलव प्राप्त करने के लिए दाईं तरफ 0 जोड़ या घटा सकते हैं।

या अतिरिक्त अंक वैकल्पिक बनाने के लिए दाईं ओर '#' का उपयोग करें, जैसा कि #। ## (0.30) के साथ पिछला 0 (0.3) बन जाएगा।

+3

आईएमएचओ, जब आप 'डबल' का उपयोग करना चाहते हैं तो 'डबल' का उपयोग न करें । –

4

की जांच: http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html

आप की तरह कुछ करेंगे:

new DecimalFormat("$#.00").format(shippingCost); 

या जब से तुम मुद्रा के साथ काम कर रहे हैं, आप के लिए कैसे काम करता है NumberFormat.getCurrencyInstance() देख सकता था।

9

यदि आप कंसोल पर डबल मान प्रिंट/लिखना चाहते हैं तो System.out.printf() या System.out.format() विधियों का उपयोग करें।

System.out.printf("\n$%10.2f",shippingCost); 
System.out.printf("%n$%.2f",shippingCost); 
+1

'" $%। 2f "ठीक रहेगा क्योंकि यह किसी भी पूर्ववर्ती स्थान को" $% 10.2f "के रूप में प्रिंट नहीं करता है।वैसे भी +1। –

+1

+1: '% n'' \ n' से बेहतर विकल्प हो सकता है –

0

फ़ॉर्मेटर क्लास भी एक अच्छा विकल्प है। fmt.format ("%। 2f", चर); 2 यहां दिखा रहा है कि आप कितने दशमलव चाहते हैं। उदाहरण के लिए आप इसे 4 में बदल सकते हैं। फॉर्मेटर को बंद करना न भूलें।

private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs; 

public static void main(String[] args) 
    { 
    computeShippingCost(); 
    } 

    public static void computeShippingCost() 
    { 
    System.out.print("Enter a number of jars: "); 
    Scanner kboard = new Scanner (System.in); 
    nJars = kboard.nextInt(); 
    int nCartons = (nJars + 11)/12; 
    int totalOunces = (nJars * 21) + (nCartons * 25); 
    int lbs = totalOunces/16; 


    double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0; 

    Formatter fmt = new Formatter(); 
    fmt.format("%.2f", shippingCost); 

    System.out.print("$" + fmt); 

    fmt.close(); 

} 
0

ठीक एक अन्य समाधान है कि मैं इसके बारे में सिर्फ मनोरंजन के लिए के बारे में सोचा एक स्ट्रिंग में अपने दशमलव कर देते हैं और फिर 2 तार, एक बिंदु से युक्त और दशमलव और अन्य युक्त में स्ट्रिंग कटौती करने के लिए किया जाएगा बिंदु के बाईं ओर int। उसके बाद आप बिंदु और दशमलव के स्ट्रिंग को 3 वर्णों तक सीमित करते हैं, एक दशमलव बिंदु के लिए और दूसरों को दशमलव के लिए सीमित करते हैं। तो बस recombine।

double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0; 
String ShippingCost = (String) shippingCost; 
String decimalCost = ShippingCost.subString(indexOf('.'),ShippingCost.Length()); 
ShippingCost = ShippingCost.subString(0,indexOf('.')); 
ShippingCost = ShippingCost + decimalCost; 

वहाँ! सरल, सही?

0

भूल जाते हैं नहीं है:

import java.text.DecimalFormat; 

नहीं तो आप NumberFormat उपयोग करने में सक्षम नहीं होगा !!

संबंधित मुद्दे

 संबंधित मुद्दे