Member 14085937 Ответов: 1

Как отформатировать таблицу информации на java только до сотой? | Табличный формат java.


Я работаю над написанием программы, которая считывает товарно-материальные запасы из файла и добавляет плату за разметку. Я предполагаю, что каждая строка будет правильной и не будет использовать никакой проверки. Тем не менее, я строю программу на формате каждой строки, надеюсь, это будет: name quantity cost markup.
Стоимость-это оптовая стоимость, которую компания заплатила за товар(за каждый). Надбавка-это число от 1 до 100, которое указывает процент надбавки для определения розничной стоимости. Я пытаюсь вывести все входные данные в файл вместе с ценой, стоимостью товаров оптом (количество * стоимость), стоимостью товаров в розницу (количество * цена). Все валюты должны быть округлены до двух десятичных знаков на выходе (printf). Файл должен быть красиво отформатирован в табличной форме с использованием операторов printf для вывода и включать строку заголовка.
Я изо всех сил пытаюсь понять, как я могу сделать так, чтобы выходной файл отображал сотые доли для всех входных данных, исключая строку количества. Во-вторых, я действительно не могу округлить " цену (R)", так как она сбрасывает " значение (R)", и прямо сейчас она правильна в соответствии с калькулятором windows и моим другом-математиком, который смотрел на нее, но не знает кода.
{МОЙ КОД}
------------
package realplayground;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Pleasegod {
public static void main(String[] args) throws FileNotFoundException {
int Quantity=0, countofQ=0, countofLines=0, count=0;
double Cost=0, Markup, FinCost=0, TotalWValue=0, TotalRValue=0, MarkPerct=0, MarkAdd=0,Value=0;
String Line, item1, item2, item3, item4;
String[] Sect;
Scanner inFile;
PrintWriter outFile;
System.out.println("(Basic) Inventory Program Starting. Opening file...");
System.out.println("Please ensure data is entered per line in the format of: 'Name Quantity Cost Markup' ");
inFile = new Scanner(new File("input.txt"));
outFile = new PrintWriter(new File("output.txt"));
outFile.printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%n",
"Item", "Quantity", "Cost", "Markup %", "Price(R)", "Value (W)", "Value (R)");
outFile.println
("---------------------------------------------------------------------------------------------------------------");
while(inFile.hasNext()){
Line = inFile.nextLine();
Sect = Line.split(" ");
count++;
if(Sect.length == 4) {
item1 = Sect[0];
item2 = Sect[1];
item3 = Sect[2];
item4 = Sect[3];
Quantity = Integer.parseInt(item2);
Cost = Double.parseDouble(item3);
Markup = Double.parseDouble(item4);
Value = Quantity * Cost;
MarkPerct = Markup/100;
FinCost = CalculateRetail(Cost, Markup, MarkPerct, MarkAdd, FinCost);
double ValueMarkup = Quantity * FinCost;
ValueMarkup = Math.round(ValueMarkup * 100.0) / 100.0;
countofQ += Quantity;
countofLines = count;
TotalWValue += Value;
TotalRValue += ValueMarkup;
outFile.printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%n", Sect[0], Sect[1], Cost, Markup, FinCost, Value, ValueMarkup);
}
else {
outFile.println("Line did not have 4 item(s)");
}
}
outFile.close();
inFile.close();
System.out.println("");
System.out.printf("Total Wholesale-Cost of all items: %1.2f", TotalWValue);
System.out.println("");
System.out.printf("Total Retail-Cost of all items: %1.2f", TotalRValue);
System.out.println("");
System.out.println("Total # of data lines: " + countofLines);
System.out.println("Total # of items: " + countofQ);
}
public static double CalculateRetail(double Cost, double Markup, double MarkPerct, double MarkAdd, double FinCost){
MarkAdd = MarkPerct * Cost;
return FinCost = MarkAdd + Cost;
}
}


{ВХОДНОЙ ФАЙЛ}
------------
штука 22 15.65 45.00
Что ты 59 6799 25.5
Гизмо 10 100.00 40.00

ошибка
trythis 10 92.9999999999999999999999999999999999999999999999999999999999999999

{ВЫХОДНОЙ ФАЙЛ}
---------------------
Товар Количество Стоимость Разметки, % Цена(Р) Значение (Б) Значение (R)
---------------------------------------------------------------------------------------------------------------
штука 22 15.65 45.0 22.692500000000003344.3 499.24
Что такое 59 67.99 25.5 85.32745 4011.41 5034.32
Гизмо 10 100.0 40.0 140.0 1000.0 1400.0
В строке не было 4 пункта(ов)
trythis 10 93.0 10.0 102.3 930.0 1023.0

Что я уже пробовал:

Я попытался округлить `FinCost`, но это отбрасывает мое значение (R), которое в настоящее время является правильным в опубликованном файле {OUTPUT FILE}. Добавление десятичного формата, но я столкнулся с той же проблемой со значением (R). Я в некотором смысле просто пытаюсь замаскировать число 22.692500000000003 делая его 22.69 но все же использую целое число в своих расчетах? Кроме того, я попросил любого старого учителя посмотреть на это, и он сказал мне, что мое значение (R) было правильным, но на самом деле у него не было времени, чтобы помочь мне отладить. Спасибо.

Richard MacCutchan

Не используйте двойные типы для финансовых расчетов. Преобразуйте все значения в наименьший номинал (цент, пироги и т. д.) или используйте десятичный тип, если он доступен.

1 Ответов

Рейтинг:
0

Chad3F

Попробуйте использовать %-10.2f вместо %-10s для соответствующих числовых значений в outFile.printf().