web-dev-qa-db-ja.com

doubleに対して印刷される小数の数を制限するにはどうすればよいですか?

このプログラムは機能しますが、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);
   }
}
22
cutrightjm

DecimalFormatter を使用します。

double number = 0.9999999999999;
DecimalFormat numberFormat = new DecimalFormat("#.00");
System.out.println(numberFormat.format(number));

「0.99」が得られます。右側の0を加算または減算して、小数を増減できます。

または、右側の「#」を使用して追加の数字をオプションにします。#。##(0.30)の場合、末尾の0がドロップされて(0.3)になります。

41
Alex

コンソールでdouble値を印刷/書き込みたい場合は、System.out.printf()またはSystem.out.format()メソッドを使用します。

System.out.printf("\n$%10.2f",shippingCost);
System.out.printf("%n$%.2f",shippingCost);
9
adatapost

DecimalFormatを確認してください: http://docs.Oracle.com/javase/6/docs/api/Java/text/DecimalFormat.html

次のようなことをします。

_new DecimalFormat("$#.00").format(shippingCost);
_

または、通貨を使用しているため、NumberFormat.getCurrencyInstance()がどのように機能するかを確認できます。

5
Jeremiah Orr

フォーマッタクラスも適切なオプションです。 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();

}
0
Tahir Ferli

DecimalFormatクラスを使用して、doubleをフォーマットします

0
Jrom

String.format() メソッドを使用します。

0
Wernsey

大丈夫私がそれの楽しみのために考えたもう1つの解決策は、あなたの小数を文字列に変えてから、文字列を2つの文字列にカットすることです、1つはポイントと小数を含み、もう1つはポイント。その後、ポイントと小数点の文字列を3文字に制限します。1つは小数点用で、もう1つは小数点用です。その後、再結合します。

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;

そこ!シンプルでしょ?

0
SonEasterZombie