Десятичный формат вызывает ошибку «пустой тип здесь не разрешен»

В моем методе toString все мои переменные печатались нормально, и весь мой код работал без проблем.

Мне нужно было отредактировать, чтобы изменить десятичный формат, чтобы вместо моих чисел, печатающих 1E9 или что-то еще (более длинное число с плавающей запятой), он фактически печатал версию ненаучной записи (123 456 789,00).

Итак, в моем методе toString я инициализировал объект DecimalFormat и внедрил его в свои значения.

Раньше я не получал такой ошибки относительно «типа 'void' здесь не разрешен», однако после реализации десятичного формата он теперь дает мне ошибку для всех 3 моих других переменных, которые я пытаюсь напечатать.

Почему мой десятичный формат влияет на другие переменные?

import java.text.DecimalFormat;

public class Project {  
  String projName;        //Name of a project
  int projNumber;      //Number of a project
  String projLocation;    //Location of a project
  Budget projBudget;      //Budget of a project

public Project(double amount) {
  this.projName = "?";
  this.projNumber = 0;
  this.projLocation = "?";
  Budget thisBudget = new Budget(amount);
  this.projBudget = thisBudget;
}

public String getName(){
  return projName;
}

public int getNumber() {
  return projNumber;
}

public String getLocation() {
  return projLocation;
}

public Budget getBudget() {
  return projBudget;
}

public void setName(String aName) {
  projName = aName;
}

public void setNumber(int aNumber) {
  projNumber = aNumber;
}

public void setLocation(String aLocation) {
  projLocation = aLocation;
}

public boolean addExpenditure(double amount) {
  return projBudget.addSpending(amount);
}

public String toString() {
  String format = "###,###.##";
  DecimalFormat decimalFormat = new DecimalFormat(format);
  return "\nProject Name:\t\t" + getName() + "\nProject Number:\t\t" + getNumber() + "\nProject Location:\t\t" + getLocation() + "\nBudget:\nInitial Funding\t$" + decimalFormat.applyPattern(String.valueOf(projBudget.initialFunding)) + "\nSpending\t\t$" + decimalFormat.applyPattern(String.valueOf(projBudget.spending)) + "\nCurrent Balance\t$" + decimalFormat.applyPattern(String.valueOf(projBudget.currentBalance)) +"\n\n";
}
}

person MaydenCompe    schedule 22.01.2016    source источник
comment
Budget thisBudget = new Budget(amount); this.projBudget = thisBudget; можно заменить на this.projBudget = new Budget(amount);.   -  person MC Emperor    schedule 22.01.2016


Ответы (1)


это потому, что тип вывода decimalFormat.applyPattern() недействителен

вы можете использовать метод decimalFormat.format( value ), и его вывод - String, поэтому вы можете без проблем использовать его в своем методе toString.

person Rahmat Waisi    schedule 22.01.2016
comment
Огромное спасибо. Как изменить формат, чтобы отображались 2 десятичных знака? Пример: 19000000.00 отображает 19 000 000 - person MaydenCompe; 22.01.2016
comment
добро пожаловать, количество # после . определяет количество десятичных знаков, учтите format = "###,###.##" , теперь результат имеет два десятичных знака, и если вы выберете другой, он изменится как format = "###,###.###" результат будет три и так далее - person Rahmat Waisi; 22.01.2016
comment
Я так и думал, но он не распечатывает .00 (что мне нужно для выполнения задания). Когда я помещаю какое-то целое число, отличное от 0, например, .21, оно действительно печатает это. Есть ли способ распечатать .00? - person MaydenCompe; 22.01.2016
comment
просто вызовите этот метод для вашего десятичного формата decimalFormat.setMinimumFractionDigits(2), и результат всегда будет иметь 2 десятичных знака - person Rahmat Waisi; 22.01.2016
comment
Когда я пытаюсь это сделать, я получаю сообщение об ошибке компилятора: gyazo.com/536c006b0b16daac1ec984ad0e221e7b Это не работает для двойников ? - person MaydenCompe; 22.01.2016