おつりの時刻

3093 ワード

質問:
2ドルで1.10ドルのものを買いましたが、おつりはいくらですか.
import java.util.*;

public class Second{

        public static void main(String[] args){

                System.out.println(2.00-1.10);

        }

}

出力は何ですか?
答え:0.89999999999999999
どうして0.90じゃないの?1.10はメモリに正確に格納できないため、最も近い数が格納されます.
import java.util.*;

public class Second{

        public static void main(String[] args){

                System.out.printf("%.2f
",2.00-1.10); } }

出力:0.90
予想されていましたが、メモリに格納されている問題は明らかに解決されていません.出力面で問題を解決しただけです.
まずBigDecimalについてご紹介します
正確な計算精度を必要としない数字についてはfloatまたはdoubleを直接使用できますが、正確な計算結果が必要な場合はBigDecimalクラスを使用する必要があり、BigDecimalクラスを使用しても大きな数の操作が可能です.
 
 
シーケンス番号
ほうほう
を選択します.
描写する
1
public BigDecimal(double val)
こうぞう
double表現をBigDecimalに変換
2
public BigDecimal(int val)
こうぞう
int表現をBigDecimalに変換
3
public BigDecimal(String val)
こうぞう
文字列表現をBigDecimalに変換
4
public BigDecimal add(BigDecimal augend)
通常
加算
5
public BigDecimal subtract(BigDecimal subtrahend)
通常
減算
6
public BigDecimal multiply(BigDecimal multiplicand)
通常
乗算#ジョウサン#
7
public BigDecimal divide(BigDecimal divisor)
通常
除算
import java.util.*;

import java.math.*;

public class Second{

        public static void main(String[] args){

                //System.out.println(2.00-1.10);

                //System.out.printf("%.2f
",2.00-1.10); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10"))); } }

BigDecimalを文字列で構築する必要があることを説明します.そうしないと、出力は依然としてエラーです.