1

Я не понимаю, почему я получаю ошибку несовместимого типа данных, я использую float за финансовое значение, я не хочу проходить через два десятичных знака!Java- Использование ошибки float-constructor

Я был под впечатлением, что вы могли бы сделать это с float, однако я получаю сообщение об ошибке вернулась ко мне со словами,

Конструктор журнал не может быть применен к данным видам.

Когда я только сделать float 7, в отличие от 7.99, он отлично работает!

Я не понял, что такое float, нужно ли вместо этого использовать double?

Я просто покажу свой класс журнала и немного своего тестового класса, чтобы продемонстрировать.

испытаний Класс:

Ниже приведен сегмент из моего тестового класса пытается использовать float в два десятичных знака:

public static void main() 
{ 
    Magazine magazine1 = new Magazine("SanYonic Publishing", "Ayup Magazine", 7.99, "Yeshumenku Suni", "12/09/2011"); 

    System.out.println(); 
    magazine1.getEditor(); 
    magazine1.getDate(); 
    magazine1.getPublisher(); 
    magazine1.getPublicationTitle(); 
    magazine1.getPrice(); 
    System.out.println(); 
    … 
} 

Magazine класс:

/** 
* Magazine Class - This class represents Magazine Objects 
*/ 
public class Magazine extends Publication 
{ 

    private String editor; 
    private String date; 

    public Magazine(String publisherIn , String publicationTitleIn, float priceIn, String editorIn, String dateIn) 
    { 
     super (publisherIn , publicationTitleIn, priceIn); 

     editor = editorIn; 
     date = dateIn; 
    } 

    public void setPublication(String publisherIn, String publicationTitleIn, float priceIn) 
    { 
     publisherIn = publisher; 
     publicationTitleIn = publicationTitle; 
     priceIn = price; 
    } 

    public String getEditor() 
    { 
     System.out.println("The editor of this magazine is " + editor); 
     return (editor); 
    } 

    public String getDate() 
    { 
     System.out.println("The publication date of this magazine is " + date); 
     return (date); 
    } 

    public String getPublisher() 
    { 
     System.out.println("The publisher of this magazine is " + publisher); 
     return (publisher); 
    } 

    public String getPublicationTitle() 
    { 
     System.out.println("The publication title of this magazine is " + publicationTitle); 
     return (publicationTitle); 
    } 

    public float getPrice() 
    { 
     System.out.println("The price of this magazine is £" + price); 
     return (price); 
    } 
} 
+4

Я бы рекомендовал, чтобы вы не использовали 'float' (или' double') для финансовых расчетов. Номера с плавающей точкой не являются точными, и вы можете получить странные ошибки округления. Обычно гораздо лучше использовать целочисленную или фиксированную арифметику, т. Е. Вычислять все в терминах целого числа центов или использовать класс «BigDecimal». –

+1

Я бы настоятельно рекомендовал использовать BigDecimal вместо float/double, поскольку типы примитивов имеют проблемы округления, хранящие большой поднабор десятичных значений. –

ответ

3

Вам необходимо

Magazine magazine1 = new Magazine ("SanYonic Publishing", "Ayup Magazine", 7.99f, "Yeshumenku Suni", "12/09/2011");

Примечание 7.99f, чтобы решить проблему компиляции.

Обратите внимание, что как поплавки, так и парные не подходят для денежных расчетов (если вас интересует точность), поскольку они могут представлять только дискретный набор значений. Все валютные расчеты должны выполняться с помощью BigDecimal.

+0

HAHAHA facepalm; Большое вам спасибо, я чувствую, что заслуживаю пощечины! – Phil

+1

Спасибо всем, что я изменил на BisgDecimal – Phil

3

В Java число с десятичной точкой в ​​нем равно double. Попробуйте 7.99f.

Кроме того, если вы делаете расчеты с валютой, вы должны взглянуть на BigDecimal, чтобы избежать странных ошибок округления позже по дороге.

+0

Спасибо Jeffery, я пытаюсь реализовать Bigdecimal, поскольку я не beofre но борется, Я импортировал java.math, java.lang.Object и java.lang.Number, Я поставил BigDecimal вместо float при определении моей переменной цены, но не уверен, как определить мой номер в моем тесте. – Phil