Как ограничить количество десятичных знаков, напечатанных для двойника?
Эта программа работает, за исключением случаев, когда число nJars кратно 7, я получу ответ, например, $14.999999999999998. Для 6 выход - 14,08. Как исправить исключения для кратных 7, чтобы отобразить что-то вроде $14.99?
import java.util.Scanner;
public class Homework_17
{
private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs;
public static void main(String[] args)
{
computeShippingCost();
}
public static void computeShippingCost()
{
System.out.print("Enter a number of jars: ");
Scanner kboard = new Scanner (System.in);
nJars = kboard.nextInt();
int nCartons = (nJars + 11) / 12;
int totalOunces = (nJars * 21) + (nCartons * 25);
int lbs = totalOunces / 16;
double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0;
System.out.print("$" + shippingCost);
}
}
Ответы
Ответ 1
Используйте DecimalFormatter:
double number = 0.9999999999999;
DecimalFormat numberFormat = new DecimalFormat("#.00");
System.out.println(numberFormat.format(number));
Дает вам "0.99". Вы можете добавить или вычесть 0 с правой стороны, чтобы получить больше или меньше десятичных знаков.
Или используйте "#" справа, чтобы сделать дополнительные цифры необязательными, как в случае С#. ## (0.30), чтобы потерять 0, чтобы стать (0.3).
Ответ 2
Если вы хотите напечатать/записать двойное значение на консоли, используйте методы System.out.printf()
или System.out.format()
.
System.out.printf("\n$%10.2f",shippingCost);
System.out.printf("%n$%.2f",shippingCost);
Ответ 3
Отметьте DecimalFormat: http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html
Вы сделаете что-то вроде:
new DecimalFormat("$#.00").format(shippingCost);
Или, поскольку вы работаете с валютой, вы можете увидеть, как NumberFormat.getCurrencyInstance()
работает для вас.
Ответ 4
Используйте класс DecimalFormat для форматирования двойного
Ответ 5
Вы используете метод String.format().
Ответ 6
Класс Formatter также является хорошим вариантом. fmt.format( "%. 2f", переменная);
2 здесь показано, сколько десятичных знаков вы хотите. Вы можете изменить его на 4, например. Не забудьте закрыть форматтер.
private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs;
public static void main(String[] args)
{
computeShippingCost();
}
public static void computeShippingCost()
{
System.out.print("Enter a number of jars: ");
Scanner kboard = new Scanner (System.in);
nJars = kboard.nextInt();
int nCartons = (nJars + 11) / 12;
int totalOunces = (nJars * 21) + (nCartons * 25);
int lbs = totalOunces / 16;
double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0;
Formatter fmt = new Formatter();
fmt.format("%.2f", shippingCost);
System.out.print("$" + fmt);
fmt.close();
}
Ответ 7
Вполне возможно, что еще одно решение, о котором я думал, просто для удовольствия, состояло в том, чтобы превратить вашу десятичную дробь в строку, а затем разрезать строку на две строки, одну из которых содержат точку и десятичные числа, а другую, содержащую Int, слева от точки. после этого вы ограничиваете String точки и десятичные числа до 3 символов, один для десятичной точки, а остальные для десятичных знаков. затем просто рекомбинируйте.
double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0;
String ShippingCost = (String) shippingCost;
String decimalCost = ShippingCost.subString(indexOf('.'),ShippingCost.Length());
ShippingCost = ShippingCost.subString(0,indexOf('.'));
ShippingCost = ShippingCost + decimalCost;
Там! Просто, правильно?
Ответ 8
Не забывайте:
import java.text.DecimalFormat;
В противном случае вы не сможете получить доступ к NumberFormat!!