Double.valueOf (String s) 함수를 사용하여 문자열을 double로 변환하려고 시도하고 100을 곱합니다. 숫자를 제외하고. 예를 들어 금액이 10.20이고 Double.valueOf (10.20) * 100을 사용하면 결과는 1020.0 대신 1019.9999가됩니다. 이것은 10.20, 8.20, 9.20에 대해서만 발생합니다. 7.20, 1.20, 11.20 등에서 잘 작동합니다. 이유는 무엇입니까? 다음은 내 코드double.valueOf (String) * 100을 곱하면 일부 숫자에 대해 잘못된 결과가 발생합니다.
1 시나리오
문자열의 = "10.20"의 조각이다; * System.out.println ("double 조작 후의 값은"+ (Double.valueOf (firstHalf) 100))입니다.
결과 : - 실제 결과는 1020.0해야으로 이중 manipualtion is1019.9999999999999
후 값. 내가 다음을주는 경우에, 그것을 잘
2 시나리오를 작동
* 문자열의 = "7.20"; System.out.println ("double 조작 후의 값은"+ (Double.valueOf (firstHalf) 100));
결과 : - 어떤 도움이
그것은하지 "나쁜"의를. 숫자를 적절하게 형식을 지정하면 (예 : 0의 소수 정밀도로 제한됨) 다시 '확인'해야합니다. 어쨌든 [모든 컴퓨터 과학자가 부동 소수점에 대해 알아야 할 내용] (https://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/02Numerics/Double/paper.pdf)을 참조하십시오. – user2246674