Десетичен формат Причинява грешка „тук не е разрешен празен тип“.

В моя метод 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
просто извикайте този метод за вашия decimalformatter decimalFormat.setMinimumFractionDigits(2) и резултатът винаги има 2 знака след десетичната запетая - person Rahmat Waisi; 22.01.2016
comment
Когато се опитам да направя това, получавам грешка на компилатора, показваща: gyazo.com/536c006b0b16daac1ec984ad0e221e7b Това не работи ли за двойни ? - person MaydenCompe; 22.01.2016