1. 코드 :
import java.math.bigdecimal; import java.text.decimalformat; import java.text.numberformat; public class format {double f = 111231.5585; public void m1 () {bigdecimal bg = new bigdecimal (f); double f1 = bg.setscale (2, bigdecimal.round_half_up) .doublevalue (); System.out.println (f1); } / *** DecimalFormat* / public void m2 ()의 가장 편리한 변환 {DecimalFormat df = new DecimalFormat ( "#. 00"); System.out.println (df. format (f)); } / *** string.format* / public void m3 () {system.out.println (String.format ( "%. 2f", f)); } public void m4 () {numberformat nf = numberformat.getNumberInstance (); nf.setmaxumpractionDigits (2); System.out.println (nf.format (f)); } public static void main (String [] args) {format f = new Format (); f.m1 (); f.m2 (); f.m3 (); f.m4 (); }}2. 출력 결과 :
111231.56
111231.56
111231.56
111,231.56
여기서 우리는 부동 소수점 수의 첨가, 뺄셈, 곱셈, 분할 및 반올림과 같은 작동 방법을 정의하는 도구 클래스를 제공합니다. 참조.
소스 파일 mathextend.java :
import java.math.bigdecimal; public class mathextend {// 기본 부서 작업 정확도 비공개 정적 최종 int default_div_scale = 10; /*** 정확한 추가 작업을 제공합니다. * @param v1 * @param v2 * @return 두 매개 변수의 합 */ public static double add (double v1, double v2) {bigdecimal b1 = new bigdecimal (double.tostring (v1)); bigdecimal b2 = 새로운 bigdecimal (double.tostring (v2)); return b1.add (b2) .doublevalue (); } / ** * 정확한 추가 작업 제공 * @param v1 * @param v2 * @return 두 개의 매개 변수의 수학적 합을 문자열 형식으로 반환 * / public static string add (문자열 v1, 문자열 v2) {bigdecimal b1 = new bigdecimal (v1); bigdecimal b2 = 새로운 bigdecimal (v2); return b1.add (b2) .toString (); } /*** 정확한 빼기 작업을 제공합니다. * @param v1 * @param v2 * @return 두 매개 변수의 차이 */ public static double suxcract (double v1, double v2) {bigdecimal b1 = new bigdecimal (double.tostring (v1)); bigdecimal b2 = 새로운 bigdecimal (double.tostring (v2)); return b1.subtract (b2) .doublevalue (); } / ** * 정확한 뺄셈 작동 * @param v1 * @param v2 * @return 두 매개 변수 사이의 수학적 차이, 문자열 형식으로 리턴 * / public static string suxcract (문자열 v1, 문자열 v2) {bigdecimal b1 = new bigdecimal (v1); bigdecimal b2 = 새로운 bigdecimal (v2); return b1.subtract (b2) .toString (); } /*** 정확한 곱셈 작업을 제공합니다. * @param v1 * @param v2 * @@return 두 매개 변수의 제품 */ public static double multiply (double v1, double v2) {bigdecimal b1 = new bigdecimal (double.tostring (v1)); bigdecimal b2 = 새로운 bigdecimal (double.tostring (v2)); B1.Multiply (b2) .doublevalue (); } / ** * 정확한 곱셈 작업을 제공 * @param v1 * @param v2 * @return 두 매개 변수의 수학적 제품, 문자열 형식으로 리턴 * / public static string 곱하기 (문자열 v1, 문자열 v2) {bigdecimal b1 = new bigdecimal (v1); bigdecimal b2 = 새로운 bigdecimal (v2); B1.multiply (b2) .toString (); } /*** (비교적) 정확한 분할 작업을 제공합니다. 분할 상황이 없을 때, 소수점 이후 * 10 자리에 정확하며, 후속 숫자는 반올림되며, 반올림 모드는 Round_half_even * @param v1 * @param v2 * @return 두 매개 변수의 몫 */ public static double divide (double v1, double v2) {return divide (v1, v2, v2, v2, default_div_scale); } /*** (비교적) 정확한 분할 작업을 제공합니다. 상황을 완료 할 끝이 없으면 스케일 매개 변수는 *의 정확도를 나타냅니다. 그리고 후속 숫자는 반올림됩니다. 반올림 모드는 round_half_even * @param v1 * @param v2 * @param scale을 사용하여 몇 가지 소수점 이외의 장소에 정확해야 함을 나타냅니다. * 두 매개 변수의 @return 지수*/ public static double divide (double v1, double v2, int scale) {return divide (v1, v2, scale, bigdecimal.round_half_even); } /*** (비교적) 정확한 분할 작업을 제공합니다. 상황을 완료 할 끝이 없으면 스케일 매개 변수는 *의 정확도를 나타냅니다. 그리고 후속 숫자는 반올림됩니다. 반올림 모드는 사용자 지정 반올림 모드* @param v1* @param v2* @param scale 소수점 이후 몇 자리에 정확해야한다는 것을 의미합니다. 불법적 인 관계 ( "스케일은 긍정적 인 정수 또는 0이어야한다"); } bigdecimal b1 = 새로운 bigdecimal (double.tostring (v1)); bigdecimal b2 = 새로운 bigdecimal (double.tostring (v2)); return b1.divide (b2, scale, round_mode) .doublevalue (); } / ** *는 (상대적으로) 정확한 분할 작업을 제공합니다. 끝없는 분할이있을 때는 10 자리가 10 자리에 정확하며 후속 숫자는 반올림되며, 라운드 숫자는 Round_half_even * @param v1 * @param v2 * @Return 두 파라미터의 몫을 사용합니다. Divide (v1, v2, default_div_scale); } /*** (비교적) 정확한 분할 작업을 제공합니다. 상황을 완료 할 끝이 없으면 스케일 매개 변수는 *의 정확도를 나타냅니다. 그리고 후속 숫자는 반올림됩니다. 반올림 모드는 Round_half_even * @param v1 * @param v2 * @param v2 * @param scale을 사용합니다. 소수점에 정확 해야하는 두 매개 변수의 몫을 나타냅니다. * @ @return return */ public static string divide (문자열 v1, 문자열 v2, int scale) {return divide (v1, v2, default_div_scale, v2, default_div_scale, v2. bigdecimal.round_half_even); } /*** (비교적) 정확한 분할 작업을 제공합니다. 상황을 완료 할 끝이 없으면 스케일 매개 변수는 *의 정확도를 나타냅니다. 그리고 후속 숫자는 반올림됩니다. 반올림 모드는 사용자 지정 된 반올림 모드 * @param v1 * @param v2 * @param scale을 사용합니다. 소수점 지점의 숫자 수는 소수점에 정확해야 함을 의미합니다. if (scale <0) {throw new neveralargumentException ( "스케일은 긍정적 인 정수 또는 0이어야한다"); } bigdecimal b1 = 새로운 bigdecimal (v1); bigdecimal b2 = 새로운 bigdecimal (v2); return b1.divide (b2, scale, round_mode) .toString (); } / *** 소수점 이하의 반올림을 제공하며, 반올림 모드는 라운드 _half_even* @param v 라운드를 반올림 해야하는 숫자를 사용합니다* @param scale 라운드 후 소수점* / public static double round (double v, int scale) {return round (v, scale, bigdecimal.round_hound_even); } / ** * 소수점 이하의 정확한 반올림 * @param v round round ralling * @param scale 소수점 이후 몇 자리 숫자 수는 @param round_mode 지정된 반올림 모드 * @return 결과 * / public static double round (double v, int lound_mode) {int (scale <0) {waster integalgummentexemention (trash new integalgumentexmence 영"); } bigdecimal b = 새로운 bigdecimal (double.tostring (v)); return b.setscale (scale, round_mode) .doublevalue (); } / ** * 소수점 이하의 반올림을 제공합니다. 반올림 모드는 라운드 _half_even * @param v round round를 사용합니다 * @param scale 소수점 장소 후에 몇 자릿수가 유지되는지 * @return 라운드 후 결과는 문자열 형식으로 반환됩니다 * / public static string (문자열 V, int scale) {v, scale, bigdecimal. } / *** 소수점 이하의 정확한 반올림* @param v round round ralling* @param scale 소수점 장소 후에 몇 자리 숫자가 유지되는 숫자* @param round_mode 지정된 반올림* @return Rounding이 문자열 형식으로 반환 된 후 결과는 문자열 형식 (문자열 V, int scale, int round_mode) {if (scale <0) <0). 양의 정수 또는 0 "); } bigdecimal b = 새로운 bigdecimal (v); 반환 B.setscale (scale, round_mode) .toString (); }}