Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自字符串java的货币格式_Java_Arrays_Format_Currency Formatting - Fatal编程技术网

来自字符串java的货币格式

来自字符串java的货币格式,java,arrays,format,currency-formatting,Java,Arrays,Format,Currency Formatting,我正在学习一门基本的Java课程,我正在完成作业的最后一部分。我唯一的问题是弄清楚我的货币格式。我没有得到正确的转换和输出。根据我的作业,我有两个文件,一个类和一个可执行文件,我必须显示图书降价40%后的价格,并显示折扣后最贵的图书。我不知道如何着手计算正确输出的货币格式 这就是我的程序应该显示的内容 这就是我的程序正在显示的内容 Book title:Java Programming, author:Liang, pages:1320, price: $145.0 Book title:Ho

我正在学习一门基本的Java课程,我正在完成作业的最后一部分。我唯一的问题是弄清楚我的货币格式。我没有得到正确的转换和输出。根据我的作业,我有两个文件,一个类和一个可执行文件,我必须显示图书降价40%后的价格,并显示折扣后最贵的图书。我不知道如何着手计算正确输出的货币格式

这就是我的程序应该显示的内容

这就是我的程序正在显示的内容

Book title:Java Programming, author:Liang, pages:1320, price: $145.0

Book title:Horton Hears a Who!, author:Dr.Seuss, pages:72, price: $19.99

Book title:The Hobbit, author:Tolkien, pages:320, price: $9.25

Book title:Born a Crime, author:Noah, pages:304, price: $17.33

Book title:null, author:null, pages:0, price: $0.0

Book title:null, author:null, pages:0, price: $0.0

Books after completing library and 40% discount
Book title:Java Programming, author:Liang, pages:1320, price: $58.0

Book title:Horton Hears a Who!, author:Dr.Seuss, pages:72, price: $7.9959999999999996

Book title:The Hobbit, author:Tolkien, pages:320, price: $3.7

Book title:Born a Crime, author:Noah, pages:304, price: $6.9319999999999995

Book title:Dark Territory, author:Kaplan, pages:352, price: $4.496

Book title:Born to Run, author:Springsteen, pages:508, price: $4.868

Here is the most expensive book after discounts

Book title:Java Programming, author:Liang, pages:1320, price: $58.0
这是我的代码:这是类文件

public class Book {
//instance data members 
private String title;
private String author;
private int pages;
private double price;
//public static int set to 0 
public static int numBooks = 0;

//parameterized constructor
Book(String title, String author, int pages, double price){
    this.title=title;
    this.author=author;
    this.pages=pages;
    this.price=price;
    numBooks++;
}

//default constructor
Book(){
    title = author = null;
    price = pages = 0;
    numBooks++;     
}

//getters and setters 
void setTitle(String title) {
    this.title=title;
}
void setAuthor(String author) {
    this.author=author;
}
void setPages(int pages) {
    this.pages=pages;
}
void setPrice(double price) {
    this.price=price;
}
String getTitle() {
    return title;
}
String getAuthor() {
    return author;
}
int getPages() {
    return pages;
}
double getPrice() {
    return price;
}
//toString method to return string showing state of a book instance
@Override
public String toString() {
    String str = "Book title:" + title + ", author:" + author +
            ", pages:" + pages + ", price: $" + price;
    return str;
}
}
这是可执行文件

public class TestBook {

public static void main(String[] args) {
    // array to hold 6 book objects specify data in first 4
    Book[] bookArray=new Book[6];
    bookArray[0]=new Book("Java Programming","Liang",1320,145.00);
    bookArray[1]=new Book("Horton Hears a Who!","Dr.Seuss",72,19.99);
    bookArray[2]=new Book("The Hobbit","Tolkien",320,9.25);
    bookArray[3]=new Book("Born a Crime","Noah",304,17.33);
    bookArray[4]=new Book();
    bookArray[5]=new Book();
    for(Book b:bookArray)
    System.out.println(b.toString());
    System.out.println("\nBooks after completing library and 40% discount");
    finishArray(bookArray);
    Book expensive = reduceBooks(bookArray);
    for(Book b:bookArray)
        System.out.println(b.toString());
    System.out.println("\nHere is the most expensive book after discounts\n" + expensive.toString());
}
//void method, use setter method to fill in last 2 books in array
static void finishArray(Book[]array) {
    array[4].setTitle("Dark Territory");
    array[4].setAuthor("Kaplan");
    array[4].setPages(352);
    array[4].setPrice(11.24);

    array[5].setTitle("Born to Run");
    array[5].setAuthor("Springsteen");
    array[5].setPages(508);
    array[5].setPrice(12.17);
}
static Book reduceBooks(Book[]array) {
    Book mostExpensiveBook=null;
    //reduce price of every book by 40%
    for (int i=0; i<6; i++) {
        array[i].setPrice(array[i].getPrice()*0.40);
        if(mostExpensiveBook==null)
            mostExpensiveBook=array[i];
        else if(mostExpensiveBook.getPrice()<array[i].getPrice())
            mostExpensiveBook = array[i];
    }
    return mostExpensiveBook;
}

}一个简单的解决方案可能是使用NumberFormat类,例如

public static class Book {
    //instance data members 

    protected static final NumberFormat FORMATTER = NumberFormat.getCurrencyInstance();
    //...

    @Override
    public String toString() {
        String str = "Book title:" + title + ", author:" + author
                        + ", pages:" + pages + ", price: " + FORMATTER.format(price);
        return str;
    }
}
@Override
public String toString() {
    String str = "Book title:" + title + ", author:" + author
                    + ", pages:" + pages + ", price: " + String.format("$%.2f", price);
    return str;
}
这将输出类似于

Book title:Java Programming, author:Liang, pages:1320, price: $145.00
Book title:Horton Hears a Who!, author:Dr.Seuss, pages:72, price: $19.99
Book title:The Hobbit, author:Tolkien, pages:320, price: $9.25
Book title:Born a Crime, author:Noah, pages:304, price: $17.33
Book title:null, author:null, pages:0, price: $0.00
Book title:null, author:null, pages:0, price: $0.00

Books after completing library and 40% discount
Book title:Java Programming, author:Liang, pages:1320, price: $58.00
Book title:Horton Hears a Who!, author:Dr.Seuss, pages:72, price: $8.00
Book title:The Hobbit, author:Tolkien, pages:320, price: $3.70
Book title:Born a Crime, author:Noah, pages:304, price: $6.93
Book title:Dark Territory, author:Kaplan, pages:352, price: $4.50
Book title:Born to Run, author:Springsteen, pages:508, price: $4.87

Here is the most expensive book after discounts
Book title:Java Programming, author:Liang, pages:1320, price: $58.00
您可以配置格式化程序以更好地满足您的个人需求,但它应该为您提供一个起点

另一种解决方案可能是使用String.format,例如

public static class Book {
    //instance data members 

    protected static final NumberFormat FORMATTER = NumberFormat.getCurrencyInstance();
    //...

    @Override
    public String toString() {
        String str = "Book title:" + title + ", author:" + author
                        + ", pages:" + pages + ", price: " + FORMATTER.format(price);
        return str;
    }
}
@Override
public String toString() {
    String str = "Book title:" + title + ", author:" + author
                    + ", pages:" + pages + ", price: " + String.format("$%.2f", price);
    return str;
}

这将执行类似的工作,但NumberFormat在格式化字符串时将考虑当前用户的区域设置

函数String.format可能会有所帮助。修复了我的格式化问题,但我的计算已关闭。最贵的书在40%折扣后的价格应该是87.00,而不是58。所以,折扣价格应该是价格-价格*0.4,将比价格降低40%。对不起,我问了这么多问题,但我对Java不熟悉,所以我知道的不多,我们的教科书也没有多大帮助。我在我的方法还原书中有计算,但当我开始在那里改变东西时,我总是会出错。我应该把计算放在别的地方吗。我不知道该怎么办。我所做的只是,将当前价格分配给一个局部变量,计算折扣金额,分配另一个局部变量,从原始价格中减去该值,将其分配回原始局部变量,然后通过setter进行设置