views:

1641

answers:

3

I'm working on an assignment, and have completed the code, however I am having an issue with correct formatting of the output. I am taking a text file, separating the products based by price, and appending the data to two separate files. How do I make the format of the double correct with the BufferedWriter so that it appears as money value (0.00) without the dollar sign? It currently outputs as (0.0). Thanks for your help.

My code:

//import the io utilities and scanner
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.util.Scanner;


/**
 * class ProductData uses the scanner utility to read a file, FileWriter and
 * BufferedWriter to write data from original file to two new files
 * based on the product price.
 */
public class ProductData
{
    /**
     * method main calls the scanner to read a file, uses a while loop
     * to scan through the file until done, and uses two if loops
     * to determine the price and append the data to two new files.
     * @param args
     * @throws java.io.FileNotFoundException
     */
    public static void main(String[] args) throws FileNotFoundException
    {


        //create a scanner, call the file to be read
        Scanner reader = new Scanner(new File("products.txt"));

        //variables defined
        int productID;
        String productDescription;
        double productPrice;


        //while loop to read each line in the file
        while (reader.hasNext())
        {
            //retrieves each item in order using the next feature of the scanner
            productID = reader.nextInt();
            productDescription = reader.next();
            productPrice = reader.nextDouble();

            //if loop for price greater than or equal to 50.00
            if(productPrice >= 50.00)
            {
                try
                {
                    // Create file
                    FileWriter fstream = new FileWriter("WishList.txt",true);
                    //create BufferedWriter to write data to the file
                    BufferedWriter out = new BufferedWriter(fstream);
                    //writes data and blank line to file
                    out.write(productID + " " + productDescription + " " + productPrice );
                    out.newLine();
                    //Close the output stream
                    out.close();
                }

                catch (Exception e)
                {
                    //Catch exception if any
                    System.err.println("Error: " + e.getMessage());
                }

            }

            //if loop for price less than 50.00
            if(productPrice < 50.00)
            {
                try
                {
                    // Create file
                    FileWriter fstream = new FileWriter("GiftIdeas.txt",true);
                    //creates BufferedWriter to write data to file
                    BufferedWriter out = new BufferedWriter(fstream);
                    //writes data and blank line to file
                    out.write(productID + " " + productDescription + " " + productPrice );
                    out.newLine();
                    //Close the output stream
                    out.close();
                }

                catch (Exception e)
                {
                    //Catch exception if any
                    System.err.println("Error: " + e.getMessage());
                }

            }//ends if loop
        }//ends while loop
    }//ends method main
}
+1  A: 

Use String.format(pattern, args). This lets you easily specify formatting rules for items such as doubles. It's a fairly complex method, so read up on the javadocs to see how it works.

skaffman
+1  A: 

Have a look at DecimalFormat.

Jack Leow
+2  A: 

For Example: out.write(productID + " " + productDescription + " " + String.format("%.2f",productPrice) );

Luzifer42
+1 for showing a useful example
Brian Agnew