Как отформатировать таблицу информации на 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
Не используйте двойные типы для финансовых расчетов. Преобразуйте все значения в наименьший номинал (цент, пироги и т. д.) или используйте десятичный тип, если он доступен.