简体   繁体   中英

How do I format a string in JOptionPane

I found and fixed my error, i was formatting twice.

I am trying to display a dollar amount using JOptionPane, but since it is a double, I am getting extra digits after the decimal. How do I format while within JOptionPane? I tried using String.format but I am getting an error when I run it;

Exception in thread "main" java.util.MissingFormatArgumentException: Format specifier '%.2f'

 at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at CouponCalc.main(CouponCalc.java:38)

Here is my code;

import javax.swing.JOptionPane;
public class CouponCalc {
    public static void main(String[] args) {

        double groceriesCost, discount;
        double tier1=.08, tier2=.1, tier3=.12, tier4=.14; //coupon percentages for easy adjustment

        groceriesCost = Double.parseDouble(JOptionPane.showInputDialog("Enter cost of groceries."));

        if (groceriesCost<0)
            {
                JOptionPane.showMessageDialog(null, "Invalid Entry"); //TODO implement loop
                System.exit(0);
            }

        else if (groceriesCost>=0 && groceriesCost<=9.99)   //No coupon
            JOptionPane.showMessageDialog(null, "You do not qualify for any coupons.)");


        else if (groceriesCost>=10.00 && groceriesCost<=59.99) //tier 1 coupon  
            JOptionPane.showMessageDialog(null, String.format("You win a discount coupon of $" + String.format("%.2f", (groceriesCost*tier1)) +
                                                ". (8% of your purchase.)"));
        else if (groceriesCost>=60.00 && groceriesCost<=149.99) //tier 2 coupon
            JOptionPane.showMessageDialog(null, String.format("You win a discount coupon of $" + String.format("%.2f", (groceriesCost*tier2)) +
                                                ". (10% of your purchase.)"));
        else if (groceriesCost>=150.00 && groceriesCost<=209.99) //tier 3 coupon
            JOptionPane.showMessageDialog(null, String.format("You win a discount coupon of $" + String.format("%.2f", (groceriesCost*tier3)) +
                                                ". (12% of your purchase.)"));
        else if (groceriesCost>=210.00) //tier 4 coupon
            JOptionPane.showMessageDialog(null, String.format("You win a discount of $" + String.format("%.2f", (groceriesCost*tier4)) +
                                                ". (14% of your purchase.)"));

        System.exit(0);
    }
}

You should not format the whole string. Only the double.

 JOptionPane.showMessageDialog(null, "You win a discount coupon of $" + String.format("%.2f", (groceriesCost*tier1)) +
                                            ". (8% of your purchase.)");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM