JavaTM 2 Platform
Standard Ed. 6

java.math
Àà BigDecimal

java.lang.Object
  ¼Ì³ÐÕß java.lang.Number
      ¼Ì³ÐÕß java.math.BigDecimal
ËùÓÐÒÑʵÏֵĽӿڣº
Serializable, Comparable<BigDecimal>

public class BigDecimal
extends Number
implements Comparable<BigDecimal>

²»¿É±äµÄ¡¢ÈÎÒ⾫¶ÈµÄÓзûºÅÊ®½øÖÆÊý¡£BigDecimal ÓÉÈÎÒ⾫¶ÈµÄÕûÊý·Ç±ê¶ÈÖµ ºÍ 32 λµÄÕûÊý±ê¶È (scale) ×é³É¡£Èç¹ûΪÁã»òÕýÊý£¬Ôò±ê¶ÈÊÇСÊýµãºóµÄλÊý¡£Èç¹ûΪ¸ºÊý£¬Ôò½«¸ÃÊýµÄ·Ç±ê¶ÈÖµ³ËÒÔ 10 µÄ¸º scale ´ÎÃÝ¡£Òò´Ë£¬BigDecimal ±íʾµÄÊýÖµÊÇ (unscaledValue × 10-scale)¡£

BigDecimal ÀàÌṩÒÔϲÙ×÷£ºËãÊõ¡¢±ê¶È²Ù×÷¡¢ÉáÈë¡¢±È½Ï¡¢¹þÏ£Ëã·¨ºÍ¸ñʽת»»¡£toString() ·½·¨Ìṩ BigDecimal µÄ¹æ·¶±íʾÐÎʽ¡£

BigDecimal ÀàʹÓû§ÄÜÍêÈ«¿ØÖÆÉáÈëÐÐΪ¡£Èç¹ûδָ¶¨ÉáÈëģʽ£¬²¢ÇÒÎÞ·¨±íʾ׼ȷ½á¹û£¬ÔòÅ׳öÒ»¸öÒì³££»·ñÔò£¬Í¨¹ýÏò¸Ã²Ù×÷ÌṩÊʵ±µÄ MathContext ¶ÔÏ󣬿ÉÒÔ¶ÔÒÑÑ¡ÔñµÄ¾«¶ÈºÍÉáÈëģʽִÐмÆËã¡£ÔÚÈκÎÇé¿öÏ£¬¿ÉÒÔΪÉáÈë¿ØÖÆÌṩ°ËÖÖÉáÈëģʽ¡£Ê¹ÓôËÀࣨÀýÈ磬ROUND_HALF_UP£©ÖеÄÕûÊý×Ö¶ÎÀ´±íʾÉáÈëģʽÒѹýʱ£»Ó¦¸ÄΪʹÓà RoundingMode enum£¨ÀýÈ磬RoundingMode.HALF_UP£©µÄö¾ÙÖµ¡£

µ±Îª MathContext ¶ÔÏóÌṩ 0 µÄ¾«¶ÈÉèÖã¨ÀýÈ磬MathContext.UNLIMITED£©Ê±£¬ËãÊõÔËËãÊÇ׼ȷµÄ£¬ËüÃÇÊDz»²ÉÓÃÈκΠMathContext ¶ÔÏóµÄËãÊõ·½·¨¡££¨ÕâÊÇµÚ 5 °æÖ®Ç°µÄ°æ±¾Ö§³ÖµÄΨһÐÐΪ¡££©ÎªÁ˼ÆËã׼ȷ½á¹û£¬²»Ê¹Óø½´ø 0 ¾«¶ÈÉèÖÃµÄ MathContext ¶ÔÏóµÄÉáÈëģʽÉèÖã¬Òò´ËÓë¸Ã¶ÔÏóÎ޹ء£ÔÚ³ý·¨ÖУ¬×¼È·µÄÉÌ¿ÉÄÜÊÇÒ»¸öÎÞÏÞ³¤µÄÊ®½øÖÆÀ©Õ¹£»ÀýÈ磬1 ³ýÒÔ 3 ËùµÃµÄÉÌ¡£Èç¹ûÉ̾ßÓÐÎÞÇîµÄÊ®½øÖÆÀ©Õ¹£¬µ«ÊÇÖ¸¶¨Á˸òÙ×÷·µ»Ø×¼È·½á¹û£¬ÔòÅ׳ö ArithmeticException¡£·ñÔò£¬ÏñÆäËû²Ù×÷ÄÇÑù£¬·µ»Ø³ý·¨ÔËËãµÄ׼ȷ½á¹û¡£

µ±¾«¶ÈÉèÖò»Îª 0 ʱ£¬BigDecimal Ëã·¨µÄ¹æÔòÍêÈ«·ûºÏ ANSI X3.274-1996 ºÍ ANSI X3.274-1996/AM 1-2000£¨ 7.4 ½Ú£©Öж¨ÒåµÄËã·¨µÄ¿ÉÑ¡²Ù×÷ģʽ¡£ÓëÉÏÊö±ê×¼²»Í¬£¬BigDecimal °üÀ¨¶àÖÖÉáÈëģʽ£¬ËüÃǶÔÓÚ°æ±¾ 5 ÒÔǰµÄ BigDecimal °æ±¾Öеijý·¨ÊÇÇ¿ÖÆÐԵġ£ÕâЩ ANSI ±ê×¼ºÍ BigDecimal ¹æ·¶Ö®¼äµÄÈκγåÍ»¶¼°´ÕÕÓÐÀûÓÚ BigDecimal µÄ·½Ê½½øÐнâ¾ö¡£

ÓÉÓÚͬһÊýÖµ¿ÉÒÔÓв»Í¬µÄ±íʾÐÎʽ£¨¾ßÓв»Í¬µÄ±ê¶È£©£¬Òò´ËÔËËãºÍÉáÈëµÄ¹æÔò±ØÐëͬʱָ¶¨ÊýÖµ½á¹ûºÍ½á¹û±íʾÐÎʽÖÐËùÓõıê¶È¡£

Ò»°ãÇé¿öÏ£¬µ±×¼È·½á¹û£¨ÔÚ³ý·¨ÖУ¬¿ÉÄÜÓÐÎÞÏÞ¶à룩±È·µ»ØµÄÊýÖµ¾ßÓиü¶àλÊýʱ£¬ÉáÈëģʽºÍ¾«¶ÈÉèÖÃÈ·¶¨²Ù×÷ÈçºÎ·µ»Ø¾ßÓÐÓÐÏÞλÊýµÄ½á¹û¡£ Ê×ÏÈ£¬MathContext µÄ precision ÉèÖÃÖ¸¶¨Òª·µ»ØµÄ×ÜλÊý£»ÕâÈ·¶¨Á˽á¹ûµÄ¾«¶È¡£Î»Êý¼ÆÊý´Ó׼ȷ½á¹ûµÄ×î×ó±ßµÄ·ÇÁãÊý×Ö¿ªÊ¼¡£ÉáÈëģʽȷ¶¨¶ªÆúµÄβ²¿Î»ÊýÈçºÎÓ°Ïì·µ»ØµÄ½á¹û¡£

¶ÔÓÚËùÓÐËãÊõÔËËã·û£¬ÔËËãµÄÖ´Ðз½Ê½ÊÇ£¬Ê×ÏȼÆËã׼ȷµÄÖмä½á¹û£¬È»ºó£¬Ê¹ÓÃÑ¡ÔñµÄÉáÈëģʽ½«ÆäÉáÈëΪ¾«¶ÈÉèÖã¨ÈçÓбØÒª£©Ö¸¶¨µÄλÊý¡£Èç¹û²»·µ»Ø×¼È·½á¹û£¬Ôò½«¶ªÆú׼ȷ½á¹ûµÄijЩÊýλ¡£µ±ÉáÈëÔö¼ÓÁË·µ»Ø½á¹ûµÄ´óСʱ£¬Ç°µ¼Êý×Ö“9”µÄ½øÎ»´«²¥¿ÉÄܻᴴ½¨ÐµÄÊýλ¡£ÀýÈ磬½«Öµ 999.9 ÉáÈëΪÈýλÊý×Ö£¬ÔòÔÚÊýÖµÉϵÈÓÚһǧ£¬±íʾΪ 100×101¡£ÔÚÕâÖÖÇé¿öÏ£¬Ð嵀 "1" ÊÇ·µ»Ø½á¹ûµÄǰµ¼Êýλ¡£

³ýÁËÂß¼­µÄ׼ȷ½á¹ûÍ⣬ÿÖÖËãÊõÔËËã¶¼ÓÐÒ»¸ö±íʾ½á¹ûµÄÊ×Ñ¡±ê¶È¡£Ï±íÁгöÁËÿ¸öÔËËãµÄÊ×Ñ¡±ê¶È¡£

ËãÊõÔËËã½á¹ûµÄÊ×Ñ¡±ê¶È

ÔËËã½á¹ûµÄÊ×Ñ¡±ê¶È
¼Ómax(addend.scale(), augend.scale())
¼õmax(minuend.scale(), subtrahend.scale())
³Ëmultiplier.scale() + multiplicand.scale()
³ýdividend.scale() - divisor.scale()
ÕâЩ±ê¶ÈÊÇ·µ»Ø×¼È·ËãÊõ½á¹ûµÄ·½·¨Ê¹Óõıê¶È£»×¼È·Ïà³ý¿ÉÄܱØÐëʹÓýϴóµÄ±ê¶È³ýÍ⣬ÒòΪ׼ȷµÄ½á¹û¿ÉÄÜÓн϶àµÄλÊý¡£ÀýÈ磬1/32 µÃµ½ 0.03125¡£

ÉáÈë֮ǰ£¬Âß¼­µÄ׼ȷÖмä½á¹ûµÄ±ê¶ÈÊǸÃÔËËãµÄÊ×Ñ¡±ê¶È¡£Èç¹ûÓà precision λÊýÎÞ·¨±íʾ׼ȷµÄÊýÖµ½á¹û£¬ÔòÉáÈë»áÑ¡ÔñÒª·µ»ØµÄÒ»×éÊý×Ö£¬²¢½«¸Ã½á¹ûµÄ±ê¶È´ÓÖмä½á¹ûµÄ±ê¶È¼õСµ½¿ÉÒÔ±íʾʵ¼Ê·µ»ØµÄ precision λÊýµÄ×îС±ê¶È¡£Èç¹û׼ȷ½á¹û¿ÉÒÔʹÓÃ×î¶à precision ¸öÊý×Ö±íʾ£¬Ôò·µ»Ø¾ßÓÐ×î½Ó½üÊ×Ñ¡±ê¶ÈµÄ±ê¶ÈµÄ½á¹û±íʾÐÎʽ¡£ÓÈÆäÊÇ£¬Í¨¹ýÒÆ³ý½áβÁã²¢¼õÉÙ±ê¶È£¬¿ÉÒÔÓÃÉÙÓÚ precision ¸öÊý×ÖÀ´±íʾ׼ȷµÄ¿É±íʾµÄÉÌ¡£ÀýÈ磬ʹÓà floor ÉáÈëģʽ½«½á¹ûÉáÈëΪÈý¸öÊý×Ö£¬
19/100 = 0.19 // integer=19, scale=2
µ«ÊÇ
21/110 = 0.190 // integer=190, scale=3

×¢Ò⣬¶ÔÓÚ¼Ó¡¢¼õºÍ³Ë£¬±ê¶ÈµÄËõ¼õÁ¿½«µÈÓÚ¶ªÆúµÄ׼ȷ½á¹ûµÄÊý×ÖλÖÃÊý¡£Èç¹ûÉáÈëµ¼Ö½øÎ»´«²¥´´½¨Ò»¸öеĸß룬Ôòµ±Î´´´½¨ÐµÄÊýλʱ£¬»á¶ªÆú¸Ã½á¹ûµÄ¸½¼ÓÊý×Ö¡£

ÆäËû·½·¨¿ÉÄÜÓëÉáÈëÓïÒåÉÔ΢²»Í¬¡£ÀýÈ磬ʹÓÃÖ¸¶¨µÄËã·¨µÄ pow ·½·¨µÃµ½µÄ½á¹û¿ÉÄÜż¶û²»Í¬ÓÚÉáÈëµÃµ½µÄËãÊõ½á¹û£¬Èç×îºóһλÓжà¸öµ¥Î»£¨ulp£©¡£

¿ÉÒÔͨ¹ýÁ½ÖÖÀàÐ͵IJÙ×÷À´´¦Àí BigDecimal µÄ±ê¶È£º±ê¶È/ÉáÈë²Ù×÷ºÍСÊýµãÒÆ¶¯²Ù×÷¡£±ê¶È/ÉáÈë²Ù×÷£¨setScale ºÍ round£©·µ»Ø BigDecimal£¬ÆäÖµ½üËÆµØ£¨»ò¾«È·µØ£©µÈÓÚ²Ù×÷ÊýµÄÖµ£¬µ«ÊÇÆä±ê¶È»ò¾«¶ÈÊÇÖ¸¶¨µÄÖµ£»¼´£ºËüÃÇ»áÔö¼Ó»ò¼õÉÙ¶ÔÆäÖµ¾ßÓÐ×îСӰÏìµÄ´æ´¢ÊýµÄ¾«¶È¡£Ð¡ÊýµãÒÆ¶¯²Ù×÷£¨movePointLeft ºÍ movePointRight£©·µ»Ø´Ó²Ù×÷Êý´´½¨µÄ BigDecimal£¬´´½¨µÄ·½·¨Êǰ´Ö¸¶¨·½Ïò½«Ð¡ÊýµãÒÆ¶¯Ò»¸öÖ¸¶¨¾àÀë¡£

ΪÁ˼ò½àÃ÷ÁËÆð¼û£¬Õû¸ö BigDecimal ·½·¨µÄÃèÊöÖж¼Ê¹ÓÃÁËα´úÂ롣α´úÂë±í´ïʽ (i + j) ÊÇ“ÆäֵΪ BigDecimal i ¼Ó BigDecimal j µÄ BigDecimal”µÄ¼òд¡£Î±´úÂë±í´ïʽ (i == j) ÊÇ“µ±ÇÒ½öµ± BigDecimal i ±íʾÓë BigDecimal j ÏàͬµÄֵʱ£¬ÔòΪ true”µÄ¼òд¡£¿ÉÒÔÀàËÆµØ½âÊÍÆäËûα´úÂë±í´ïʽ¡£·½À¨ºÅÓÃÓÚ±íÊ¾ÌØ¶¨µÄ BigInteger ºÍ¶¨Òå BigDecimal ÖµµÄ±ê¶È¶Ô£»ÀýÈ磬[19, 2] ±íʾ BigDecimal ÔÚÊýÖµÉϵÈÓÚ 0.19£¬±ê¶ÈÊÇ 2¡£

×¢£ºÈç¹û BigDecimal ¶ÔÏóÓÃ×÷ SortedMap Öеļü»ò SortedSet ÖеÄÔªËØ£¬ÔòÓ¦ÌØ±ðСÐÄ£¬ÒòΪ BigDecimal µÄ×ÔÈ»ÅÅÐòÓë equals ·½·¨²»Ò»Ö¡£Óйظü¶àÐÅÏ¢£¬Çë²Î¼û Comparable¡¢SortedMap »ò SortedSet¡£

µ±ÎªÈκÎÊäÈë²ÎÊý´«µÝ null ¶ÔÏóÒýÓÃʱ£¬´ËÀàµÄËùÓз½·¨ºÍ¹¹Ôì·½·¨¶¼½«Å׳ö NullPointerException¡£

ÁíÇë²Î¼û£º
BigInteger, MathContext, RoundingMode, SortedMap, SortedSet, ÐòÁл¯±í¸ñ

×Ö¶ÎÕªÒª
static BigDecimal ONE
          ÖµÎª 1£¬±ê¶ÈΪ 0¡£
static int ROUND_CEILING
          ½Ó½üÕýÎÞÇî´óµÄÉáÈëģʽ¡£
static int ROUND_DOWN
          ½Ó½üÁãµÄÉáÈëģʽ¡£
static int ROUND_FLOOR
          ½Ó½ü¸ºÎÞÇî´óµÄÉáÈëģʽ¡£
static int ROUND_HALF_DOWN
          Ïò“×î½Ó½üµÄ”Êý×ÖÉáÈ룬Èç¹ûÓëÁ½¸öÏàÁÚÊý×ֵľàÀëÏàµÈ£¬ÔòΪÉÏÉáÈëµÄÉáÈëģʽ¡£
static int ROUND_HALF_EVEN
          Ïò“×î½Ó½üµÄ”Êý×ÖÉáÈ룬Èç¹ûÓëÁ½¸öÏàÁÚÊý×ֵľàÀëÏàµÈ£¬ÔòÏòÏàÁڵĿÊýÉáÈë¡£
static int ROUND_HALF_UP
          Ïò“×î½Ó½üµÄ”Êý×ÖÉáÈ룬Èç¹ûÓëÁ½¸öÏàÁÚÊý×ֵľàÀëÏàµÈ£¬ÔòΪÏòÉÏÉáÈëµÄÉáÈëģʽ¡£
static int ROUND_UNNECESSARY
          ¶ÏÑÔÇëÇóµÄ²Ù×÷¾ßÓо«È·µÄ½á¹û£¬Òò´Ë²»ÐèÒªÉáÈë¡£
static int ROUND_UP
          ÉáÈëÔ¶ÀëÁãµÄÉáÈëģʽ¡£
static BigDecimal TEN
          ÖµÎª 10£¬±ê¶ÈΪ 0¡£
static BigDecimal ZERO
          ÖµÎª 0£¬±ê¶ÈΪ 0¡£
 
¹¹Ôì·½·¨ÕªÒª
BigDecimal(BigInteger val)
          ½« BigInteger ת»»Îª BigDecimal¡£
BigDecimal(BigInteger unscaledVal, int scale)
          ½« BigInteger ·Ç±ê¶ÈÖµºÍ int ±ê¶Èת»»Îª BigDecimal¡£
BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
          ½« BigInteger ·Ç±ê¶ÈÖµºÍ int ±ê¶Èת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
BigDecimal(BigInteger val, MathContext mc)
          ½« BigInteger ת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
BigDecimal(char[] in)
          ½« BigDecimal µÄ×Ö·ûÊý×é±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·ûÐòÁС£
BigDecimal(char[] in, int offset, int len)
          ½« BigDecimal µÄ×Ö·ûÊý×é±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·ûÐòÁУ¬Í¬Ê±ÔÊÐíÖ¸¶¨×ÓÊý×é¡£
BigDecimal(char[] in, int offset, int len, MathContext mc)
          ½« BigDecimal µÄ×Ö·ûÊý×é±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·ûÐòÁУ¬Í¬Ê±ÔÊÐíÖ¸¶¨×ÓÊý×飬²¢¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈë¡£
BigDecimal(char[] in, MathContext mc)
          ½« BigDecimal µÄ×Ö·ûÊý×é±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·ûÐòÁУ¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
BigDecimal(double val)
          ½« double ת»»Îª BigDecimal£¬ºóÕßÊÇ double µÄ¶þ½øÖƸ¡µãֵ׼ȷµÄÊ®½øÖƱíʾÐÎʽ¡£
BigDecimal(double val, MathContext mc)
          ½« double ת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
BigDecimal(int val)
          ½« int ת»»Îª BigDecimal¡£
BigDecimal(int val, MathContext mc)
          ½« int ת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
BigDecimal(long val)
          ½« long ת»»Îª BigDecimal¡£
BigDecimal(long val, MathContext mc)
          ½« long ת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
BigDecimal(String val)
          ½« BigDecimal µÄ×Ö·û´®±íʾÐÎʽת»»Îª BigDecimal¡£
BigDecimal(String val, MathContext mc)
          ½« BigDecimal µÄ×Ö·û´®±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·û´®£¨°´ÕÕÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 
·½·¨ÕªÒª
 BigDecimal abs()
          ·µ»Ø BigDecimal£¬ÆäֵΪ´Ë BigDecimal µÄ¾ø¶ÔÖµ£¬Æä±ê¶ÈΪ this.scale()¡£
 BigDecimal abs(MathContext mc)
          ·µ»ØÆäֵΪ´Ë BigDecimal ¾ø¶ÔÖµµÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 BigDecimal add(BigDecimal augend)
          ·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this + augend)£¬Æä±ê¶ÈΪ max(this.scale(), augend.scale())¡£
 BigDecimal add(BigDecimal augend, MathContext mc)
          ·µ»ØÆäֵΪ (this + augend) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 byte byteValueExact()
          ½«´Ë BigDecimal ת»»Îª byte£¬ÒÔ¼ì²é¶ªÊ§µÄÐÅÏ¢¡£
 int compareTo(BigDecimal val)
          ½«´Ë BigDecimal ÓëÖ¸¶¨µÄ BigDecimal ±È½Ï¡£
 BigDecimal divide(BigDecimal divisor)
          ·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬ÆäÊ×Ñ¡±ê¶ÈΪ (this.scale() - divisor.scale())£»Èç¹ûÎÞ·¨±íʾ׼ȷµÄÉÌÖµ£¨ÒòΪËüÓÐÎÞÇîµÄÊ®½øÖÆÀ©Õ¹£©£¬ÔòÅ׳ö ArithmeticException¡£
 BigDecimal divide(BigDecimal divisor, int roundingMode)
          ·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬Æä±ê¶ÈΪ this.scale()¡£
 BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
          ·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬Æä±ê¶ÈΪָ¶¨±ê¶È¡£
 BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
          ·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬Æä±ê¶ÈΪָ¶¨±ê¶È¡£
 BigDecimal divide(BigDecimal divisor, MathContext mc)
          ·µ»ØÆäֵΪ (this / divisor) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
          ·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬Æä±ê¶ÈΪ this.scale()¡£
 BigDecimal[] divideAndRemainder(BigDecimal divisor)
          ·µ»ØÓÉÁ½¸öÔªËØ×é³ÉµÄ BigDecimal Êý×飬¸ÃÊý×é°üº¬ divideToIntegralValue µÄ½á¹û£¬ºó¸ú¶ÔÁ½¸ö²Ù×÷Êý¼ÆËãËùµÃµ½µÄ remainder¡£
 BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
          ·µ»ØÓÉÁ½¸öÔªËØ×é³ÉµÄ BigDecimal Êý×飬¸ÃÊý×é°üº¬ divideToIntegralValue µÄ½á¹û£¬ºó¸ú¸ù¾ÝÉÏÏÂÎÄÉèÖöÔÁ½¸ö²Ù×÷Êý½øÐÐÉáÈë¼ÆËãËùµÃµ½µÄ remainder µÄ½á¹û¡£
 BigDecimal divideToIntegralValue(BigDecimal divisor)
          ·µ»Ø BigDecimal£¬ÆäֵΪÏòÏÂÉáÈëËùµÃÉÌÖµ (this / divisor) µÄÕûÊý²¿·Ö¡£
 BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
          ·µ»Ø BigDecimal£¬ÆäֵΪ (this / divisor) µÄÕûÊý²¿·Ö¡£
 double doubleValue()
          ½«´Ë BigDecimal ת»»Îª double¡£
 boolean equals(Object x)
          ±È½Ï´Ë BigDecimal ÓëÖ¸¶¨µÄ Object µÄÏàµÈÐÔ¡£
 float floatValue()
          ½«´Ë BigDecimal ת»»Îª float¡£
 int hashCode()
          ·µ»Ø´Ë BigDecimal µÄ¹þÏ£Âë¡£
 int intValue()
          ½«´Ë BigDecimal ת»»Îª int¡£
 int intValueExact()
          ½«´Ë BigDecimal ת»»Îª int£¬ÒÔ¼ì²é¶ªÊ§µÄÐÅÏ¢¡£
 long longValue()
          ½«´Ë BigDecimal ת»»Îª long¡£
 long longValueExact()
          ½«´Ë BigDecimal ת»»Îª long£¬ÒÔ¼ì²é¶ªÊ§µÄÐÅÏ¢¡£
 BigDecimal max(BigDecimal val)
          ·µ»Ø´Ë BigDecimal ºÍ val µÄ×î´óÖµ¡£
 BigDecimal min(BigDecimal val)
          ·µ»Ø´Ë BigDecimal ºÍ val µÄ×îСֵ¡£
 BigDecimal movePointLeft(int n)
          ·µ»ØÒ»¸ö BigDecimal£¬ËüµÈЧÓÚ½«¸ÃÖµµÄСÊýµãÏò×óÒÆ¶¯ n λ¡£
 BigDecimal movePointRight(int n)
          ·µ»ØÒ»¸ö BigDecimal£¬ËüµÈЧÓÚ½«¸ÃÖµµÄСÊýµãÏòÓÒÒÆ¶¯ n λ¡£
 BigDecimal multiply(BigDecimal multiplicand)
          ·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this × multiplicand)£¬Æä±ê¶ÈΪ (this.scale() + multiplicand.scale())¡£
 BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
          ·µ»ØÆäֵΪ (this × multiplicand) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 BigDecimal negate()
          ·µ»Ø BigDecimal£¬ÆäֵΪ (-this)£¬Æä±ê¶ÈΪ this.scale()¡£
 BigDecimal negate(MathContext mc)
          ·µ»ØÆäֵΪ (-this) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 BigDecimal plus()
          ·µ»Ø BigDecimal£¬ÆäֵΪ (+this)£¬Æä±ê¶ÈΪ this.scale()¡£
 BigDecimal plus(MathContext mc)
          ·µ»ØÆäֵΪ (+this) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 BigDecimal pow(int n)
          ·µ»ØÆäֵΪ (thisn) µÄ BigDecimal£¬×¼È·¼ÆËã¸ÃÃÝ£¬Ê¹Æä¾ßÓÐÎÞÏÞ¾«¶È¡£
 BigDecimal pow(int n, MathContext mc)
          ·µ»ØÆäֵΪ (thisn) µÄ BigDecimal¡£
 int precision()
          ·µ»Ø´Ë BigDecimal µÄ¾«¶È¡£
 BigDecimal remainder(BigDecimal divisor)
          ·µ»ØÆäֵΪ (this % divisor) µÄ BigDecimal¡£
 BigDecimal remainder(BigDecimal divisor, MathContext mc)
          ·µ»ØÆäֵΪ (this % divisor) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 BigDecimal round(MathContext mc)
          ·µ»Ø¸ù¾Ý MathContext ÉèÖýøÐÐÉáÈëºóµÄ BigDecimal¡£
 int scale()
          ·µ»Ø´Ë BigDecimal µÄ±ê¶È¡£
 BigDecimal scaleByPowerOfTen(int n)
          ·µ»ØÆäÊýÖµµÈÓÚ (this * 10n) µÄ BigDecimal¡£
 BigDecimal setScale(int newScale)
          ·µ»ØÒ»¸ö BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬ÆäÖµÔÚÊýÖµÉϵÈÓÚ´Ë BigDecimal µÄÖµ¡£
 BigDecimal setScale(int newScale, int roundingMode)
          ·µ»ØÒ»¸ö BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬Æä·Ç±ê¶Èֵͨ¹ý´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ³ËÒÔ»ò³ýÒÔÊ®µÄÊʵ±´ÎÃÝÀ´È·¶¨£¬ÒÔά»¤Æä×ÜÖµ¡£
 BigDecimal setScale(int newScale, RoundingMode roundingMode)
          ·µ»Ø BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬Æä·Ç±ê¶Èֵͨ¹ý´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ³ËÒÔ»ò³ýÒÔÊ®µÄÊʵ±´ÎÃÝÀ´È·¶¨£¬ÒÔά»¤Æä×ÜÖµ¡£
 short shortValueExact()
          ½«´Ë BigDecimal ת»»Îª short£¬ÒÔ¼ì²é¶ªÊ§µÄÐÅÏ¢¡£
 int signum()
          ·µ»Ø´Ë BigDecimal µÄÕý¸ººÅº¯Êý¡£
 BigDecimal stripTrailingZeros()
          ·µ»ØÊýÖµÉϵÈÓÚ´ËСÊý£¬µ«´Ó¸Ã±íʾÐÎÊ½ÒÆ³ýËùÓÐβ²¿ÁãµÄ BigDecimal¡£
 BigDecimal subtract(BigDecimal subtrahend)
          ·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this - subtrahend)£¬Æä±ê¶ÈΪ max(this.scale(), subtrahend.scale())¡£
 BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
          ·µ»ØÆäֵΪ (this - subtrahend) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£
 BigInteger toBigInteger()
          ½«´Ë BigDecimal ת»»Îª BigInteger¡£
 BigInteger toBigIntegerExact()
          ½«´Ë BigDecimal ת»»Îª BigInteger£¬ÒÔ¼ì²é¶ªÊ§µÄÐÅÏ¢¡£
 String toEngineeringString()
          ·µ»Ø´Ë BigDecimal µÄ×Ö·û´®±íʾÐÎʽ£¬ÐèÒªÖ¸Êýʱ£¬ÔòʹÓù¤³Ì¼ÆÊý·¨¡£
 String toPlainString()
          ·µ»Ø²»´øÖ¸Êý×Ö¶ÎµÄ´Ë BigDecimal µÄ×Ö·û´®±íʾÐÎʽ¡£
 String toString()
          ·µ»Ø´Ë BigDecimal µÄ×Ö·û´®±íʾÐÎʽ£¬Èç¹ûÐèÒªÖ¸Êý£¬ÔòʹÓÿÆÑ§¼ÇÊý·¨¡£
 BigDecimal ulp()
          ·µ»Ø´Ë BigDecimal µÄ ulp£¨×îºóһλµÄµ¥Î»£©µÄ´óС¡£
 BigInteger unscaledValue()
          ·µ»ØÆäֵΪ´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ µÄ BigInteger¡£
static BigDecimal valueOf(double val)
          Ê¹Óà Double.toString(double) ·½·¨ÌṩµÄ double ¹æ·¶µÄ×Ö·û´®±íʾÐÎʽ½« double ת»»Îª BigDecimal¡£
static BigDecimal valueOf(long val)
          ½« long ֵת»»Îª¾ßÓÐÁã±ê¶ÈµÄ BigDecimal¡£
static BigDecimal valueOf(long unscaledVal, int scale)
          ½« long ·Ç±ê¶ÈÖµºÍ int ±ê¶Èת»»Îª BigDecimal¡£
 
´ÓÀà java.lang.Number ¼Ì³ÐµÄ·½·¨
byteValue, shortValue
 
´ÓÀà java.lang.Object ¼Ì³ÐµÄ·½·¨
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

×Ö¶ÎÏêϸÐÅÏ¢

ZERO

public static final BigDecimal ZERO
ֵΪ 0£¬±ê¶ÈΪ 0¡£

´ÓÒÔϰ汾¿ªÊ¼£º
1.5

ONE

public static final BigDecimal ONE
ֵΪ 1£¬±ê¶ÈΪ 0¡£

´ÓÒÔϰ汾¿ªÊ¼£º
1.5

TEN

public static final BigDecimal TEN
ֵΪ 10£¬±ê¶ÈΪ 0¡£

´ÓÒÔϰ汾¿ªÊ¼£º
1.5

ROUND_UP

public static final int ROUND_UP
ÉáÈëÔ¶ÀëÁãµÄÉáÈëģʽ¡£ÔÚ¶ªÆú·ÇÁ㲿·Ö֮ǰʼÖÕÔö¼ÓÊý×Ö¡£×¢Ò⣬´ËÉáÈëģʽʼÖÕ²»»á¼õÉÙ¼ÆËãÖµµÄ´óС¡£

ÁíÇë²Î¼û£º
³£Á¿×Ö¶ÎÖµ

ROUND_DOWN

public static final int ROUND_DOWN
½Ó½üÁãµÄÉáÈëģʽ¡£ÔÚ¶ªÆúij²¿·Ö֮ǰʼÖÕ²»Ôö¼ÓÊý×Ö£¨¼´½Ø¶Ì£©¡£×¢Ò⣬´ËÉáÈëģʽʼÖÕ²»»áÔö¼Ó¼ÆËãÖµµÄ´óС¡£

ÁíÇë²Î¼û£º
³£Á¿×Ö¶ÎÖµ

ROUND_CEILING

public static final int ROUND_CEILING
½Ó½üÕýÎÞÇî´óµÄÉáÈëģʽ¡£Èç¹û BigDecimal ΪÕý£¬ÔòÉáÈëÐÐΪÓë ROUND_UP Ïàͬ£»Èç¹ûΪ¸º£¬ÔòÉáÈëÐÐΪÓë ROUND_DOWN Ïàͬ¡£×¢Ò⣬´ËÉáÈëģʽʼÖÕ²»»á¼õÉÙ¼ÆËãÖµ¡£

ÁíÇë²Î¼û£º
³£Á¿×Ö¶ÎÖµ

ROUND_FLOOR

public static final int ROUND_FLOOR
½Ó½ü¸ºÎÞÇî´óµÄÉáÈëģʽ¡£Èç¹û BigDecimal ΪÕý£¬ÔòÉáÈëÐÐΪÓë ROUND_DOWN Ïàͬ£»Èç¹ûΪ¸º£¬ÔòÉáÈëÐÐΪÓë ROUND_UP Ïàͬ¡£×¢Ò⣬´ËÉáÈëģʽʼÖÕ²»»áÔö¼Ó¼ÆËãÖµ¡£

ÁíÇë²Î¼û£º
³£Á¿×Ö¶ÎÖµ

ROUND_HALF_UP

public static final int ROUND_HALF_UP
Ïò“×î½Ó½üµÄ”Êý×ÖÉáÈ룬Èç¹ûÓëÁ½¸öÏàÁÚÊý×ֵľàÀëÏàµÈ£¬ÔòΪÏòÉÏÉáÈëµÄÉáÈëģʽ¡£Èç¹ûÉáÆú²¿·Ö >= 0.5£¬ÔòÉáÈëÐÐΪÓë ROUND_UP Ïàͬ£»·ñÔòÉáÈëÐÐΪÓë ROUND_DOWN Ïàͬ¡£×¢Ò⣬ÕâÊÇÎÒÃÇ´ó¶àÊýÈËÔÚСѧʱ¾Íѧ¹ýµÄÉáÈëģʽ¡£

ÁíÇë²Î¼û£º
³£Á¿×Ö¶ÎÖµ

ROUND_HALF_DOWN

public static final int ROUND_HALF_DOWN
Ïò“×î½Ó½üµÄ”Êý×ÖÉáÈ룬Èç¹ûÓëÁ½¸öÏàÁÚÊý×ֵľàÀëÏàµÈ£¬ÔòΪÉÏÉáÈëµÄÉáÈëģʽ¡£Èç¹ûÉáÆú²¿·Ö > 0.5£¬ÔòÉáÈëÐÐΪÓë ROUND_UP Ïàͬ£»·ñÔòÉáÈëÐÐΪÓë ROUND_DOWN Ïàͬ¡£

ÁíÇë²Î¼û£º
³£Á¿×Ö¶ÎÖµ

ROUND_HALF_EVEN

public static final int ROUND_HALF_EVEN
Ïò“×î½Ó½üµÄ”Êý×ÖÉáÈ룬Èç¹ûÓëÁ½¸öÏàÁÚÊý×ֵľàÀëÏàµÈ£¬ÔòÏòÏàÁڵĿÊýÉáÈë¡£Èç¹ûÉáÆú²¿·Ö×ó±ßµÄÊý×ÖÎªÆæÊý£¬ÔòÉáÈëÐÐΪÓë ROUND_HALF_UP Ïàͬ£»Èç¹ûΪżÊý£¬ÔòÉáÈëÐÐΪÓë ROUND_HALF_DOWN Ïàͬ¡£×¢Ò⣬ÔÚÖØ¸´½øÐÐһϵÁмÆËãʱ£¬´ËÉáÈëģʽ¿ÉÒÔ½«ÀÛ¼Ó´íÎó¼õµ½×îС¡£

ÁíÇë²Î¼û£º
³£Á¿×Ö¶ÎÖµ

ROUND_UNNECESSARY

public static final int ROUND_UNNECESSARY
¶ÏÑÔÇëÇóµÄ²Ù×÷¾ßÓо«È·µÄ½á¹û£¬Òò´Ë²»ÐèÒªÉáÈë¡£Èç¹û¶Ô»ñµÃ¾«È·½á¹ûµÄ²Ù×÷Ö¸¶¨´ËÉáÈëģʽ£¬ÔòÅ׳ö ArithmeticException¡£

ÁíÇë²Î¼û£º
³£Á¿×Ö¶ÎÖµ
¹¹Ôì·½·¨ÏêϸÐÅÏ¢

BigDecimal

public BigDecimal(char[] in,
                  int offset,
                  int len)
½« BigDecimal µÄ×Ö·ûÊý×é±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·ûÐòÁУ¬Í¬Ê±ÔÊÐíÖ¸¶¨×ÓÊý×é¡£

×¢Ò⣬Èç¹û×Ö·ûÊý×éÖÐÒѾ­Ìṩ×Ö·ûµÄÐòÁУ¬ÔòʹÓô˹¹Ôì·½·¨Òª±È½« char Êý×éת»»Îª×Ö·û´®²¢Ê¹Óà BigDecimal(String) ¹¹Ôì·½·¨¸ü¿ì¡£

²ÎÊý£º
in - ×÷ΪԴ×Ö·ûµÄ char Êý×é¡£
offset - Òª¼ì²éµÄÊý×éÖеĵÚÒ»¸ö×Ö·û¡£
len - Òª¿¼ÂǵÄ×Ö·ûÊý¡£
Å׳ö£º
NumberFormatException - Èç¹û in ²»ÊÇ BigDecimal µÄÓÐЧ±íʾÐÎʽ£¬»òÕß¶¨ÒåµÄ×ÓÊý×é²»ÍêÈ«ÔÚ in ÖС£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(char[] in,
                  int offset,
                  int len,
                  MathContext mc)
½« BigDecimal µÄ×Ö·ûÊý×é±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·ûÐòÁУ¬Í¬Ê±ÔÊÐíÖ¸¶¨×ÓÊý×飬²¢¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈë¡£

×¢Ò⣬Èç¹û×Ö·ûÊý×éÖÐÒѾ­Ìṩ×Ö·ûµÄÐòÁУ¬ÔòʹÓô˹¹Ôì·½·¨Òª±È½« char Êý×éת»»Îª×Ö·û´®²¢Ê¹Óà BigDecimal(String) ¹¹Ôì·½·¨¸ü¿ì¡£

²ÎÊý£º
in - ×÷ΪԴ×Ö·ûµÄ char Êý×é¡£
offset - Òª¼ì²éµÄÊý×éÖеĵÚÒ»¸ö×Ö·û¡£
len - Òª¿¼ÂǵÄ×Ö·ûÊý¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬ÇÒÉáÈëģʽΪ UNNECESSARY¡£
NumberFormatException - Èç¹û in ²»ÊÇ BigDecimal µÄÓÐЧ±íʾÐÎʽ£¬»òÕß¶¨ÒåµÄ×ÓÊý×é²»ÍêÈ«ÔÚ in ÖС£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(char[] in)
½« BigDecimal µÄ×Ö·ûÊý×é±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·ûÐòÁС£

×¢Ò⣬Èç¹û×Ö·ûÐòÁÐÒѾ­¿ÉÒÔ×÷Ϊһ¸ö×Ö·ûÊý×éʹÓã¬ÔòʹÓô˹¹Ôì·½·¨Òª±È½« char Êý×éת»»Îª×Ö·û´®²¢Ê¹Óà BigDecimal(String) ¹¹Ôì·½·¨¸ü¿ì¡£

²ÎÊý£º
in - ×÷ΪԴ×Ö·ûµÄ char Êý×é¡£
Å׳ö£º
NumberFormatException - Èç¹û in ²»ÊÇ BigDecimal µÄÓÐЧ±íʾÐÎʽ¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(char[] in,
                  MathContext mc)
½« BigDecimal µÄ×Ö·ûÊý×é±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·ûÐòÁУ¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£

×¢Ò⣬Èç¹û×Ö·ûÐòÁÐÒѾ­¿ÉÒÔ×÷Ϊһ¸ö×Ö·ûÊý×éʹÓã¬ÔòʹÓô˹¹Ôì·½·¨Òª±È½« char Êý×éת»»Îª×Ö·û´®²¢Ê¹Óà BigDecimal(String) ¹¹Ôì·½·¨¸ü¿ì¡£

²ÎÊý£º
in - ×÷ΪԴ×Ö·ûµÄ char Êý×é¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬ÇÒÉáÈëģʽΪ UNNECESSARY¡£
NumberFormatException - Èç¹û in ²»ÊÇ BigDecimal µÄÓÐЧ±íʾÐÎʽ¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(String val)
½« BigDecimal µÄ×Ö·û´®±íʾÐÎʽת»»Îª BigDecimal¡£×Ö·û´®±íʾÐÎʽÓÉ¿ÉÑ¡·ûºÅ '+' ('\u002B') »ò '-' ('\u002D') ×é³É£¬ºó¸úÁã»ò¶à¸öÊ®½øÖÆÊý×Ö£¨“ÕûÊý”£©µÄÐòÁУ¬¿ÉÒÔÑ¡Ôñºó¸úÒ»¸öСÊý£¬Ò²¿ÉÒÔÑ¡Ôñºó¸úÒ»¸öÖ¸Êý¡£

¸ÃСÊýÓÉСÊýµãÒÔ¼°ºó¸úµÄÁã»ò¸ü¶àÊ®½øÖÆÊý×Ö×é³É¡£×Ö·û´®±ØÐëÖÁÉÙ°üº¬ÕûÊý»òСÊý²¿·ÖÖеÄÒ»¸öÊý×Ö¡£ÓÉ·ûºÅ¡¢ÕûÊýºÍСÊý²¿·Ö×é³ÉµÄÊý×Ö³ÆÎªÓÐЧλÊý¡£

Ö¸ÊýÓÉ×Ö·û 'e'£¨'\u0065') »ò 'E' ('\u0045') ÒÔ¼°ºó¸úµÄÒ»¸ö»ò¶à¸öÊ®½øÖÆÊý×Ö×é³É¡£Ö¸ÊýµÄÖµ±ØÐëλÓÚ Integer.MAX_VALUE (Integer.MIN_VALUE+1) ºÍ Integer.MAX_VALUE£¨°üÀ¨£©Ö®¼ä¡£

¸üÕýʽµØËµ£¬ÒÔÏÂÓï·¨ÃèÊöÁ˴˹¹Ôì·½·¨½ÓÊܵÄ×Ö·û´®£º

BigDecimalString:
Signopt Significand Exponentopt

Sign:
+
-

Significand:
IntegerPart .FractionPartopt
. FractionPart
IntegerPart

IntegerPart:
Digits

FractionPart:
Digits

Exponent:
ExponentIndicator SignedInteger

ExponentIndicator:
e
E

SignedInteger:
Signopt Digits

Digits:
Digit
Digits Digit

Digit:
Character.isDigit(char) ¶ÔÆä·µ»Ø true µÄÈκÎ×Ö·û£¬Èç 0¡¢1¡¢2¡­¡­

·µ»ØµÄ BigDecimal µÄ±ê¶È½«ÊÇСÊý²¿·ÖÖеÄÊý×ÖλÊý£¬Èç¹û¸Ã×Ö·û´®²»°üº¬Ð¡Êýµã£¬Ôò±ê¶ÈΪÁ㣬ÕâÈ¡¾öÓÚ¶ÔÖ¸ÊýµÄµ÷Õû£»Èç¹û×Ö·û´®°üº¬Ò»¸öÖ¸Êý£¬Ôò´Ó±ê¶È¼õÈ¥¸ÃÖ¸Êý¡£µÃµ½µÄ±ê¶ÈÖµ±ØÐëλÓÚ Integer.MIN_VALUE ºÍ Integer.MAX_VALUE£¨°üÀ¨£©Ö®¼ä¡£

Character.digit(char, int) ¼¯Ìṩ´Ó×Ö·ûµ½Êý×ÖµÄÓ³É䣬ÒÔת»»³É»ùÊý 10¡£¸Ã×Ö·û´®²»Äܰüº¬ÈκζîÍâ×Ö·û£¨ÀýÈ磬¿Õ°×£©¡£

ʾÀý£º
·µ»ØµÄ BigDecimal µÄÖµµÈÓÚÓÐЧλÊý × 10 Ö¸Êý¡£¶ÔÓÚ×ó±ßµÄÿ¸ö×Ö·û´®£¬µÃµ½µÄ±íʾÐÎʽ [BigInteger, scale] ÏÔʾÔÚÓұߡ£

 "0"            [0,0]
 "0.00"         [0,2]
 "123"          [123,0]
 "-123"         [-123,0]
 "1.23E3"       [123,-1]
 "1.23E+3"      [123,-1]
 "12.3E+7"      [123,-6]
 "12.0"         [120,1]
 "12.3"         [123,1]
 "0.00123"      [123,5]
 "-1.23E-12"    [-123,14]
 "1234.5E-4"    [12345,5]
 "0E+7"         [0,-7]
 "-0"           [0,0]
 

×¢£º¶ÔÓÚ²»ÊÇ float¡¢double NaN ºÍ ±Infinity µÄÖµ£¬´Ë¹¹Ôì·½·¨Óë Float.toString(float) ºÍ Double.toString(double) ·µ»ØµÄÖµ¼æÈÝ¡£Õâͨ³£Êǽ« float »ò double ת»»Îª BigDecimal µÄÊ×Ñ¡·½·¨£¬ÒòΪËü²»»áÓöµ½ BigDecimal(double) ¹¹Ôì·½·¨µÄ²»¿ÉÔ¤ÖªÎÊÌâ¡£

²ÎÊý£º
val - BigDecimal µÄ×Ö·û´®±íʾÐÎʽ¡£
Å׳ö£º
NumberFormatException - Èç¹û val ²»ÊÇ BigDecimal µÄÓÐЧ±íʾÐÎʽ¡£

BigDecimal

public BigDecimal(String val,
                  MathContext mc)
½« BigDecimal µÄ×Ö·û´®±íʾÐÎʽת»»Îª BigDecimal£¬½ÓÊÜÓë BigDecimal(String) ¹¹Ôì·½·¨ÏàͬµÄ×Ö·û´®£¨°´ÕÕÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£

²ÎÊý£º
val - BigDecimal µÄ×Ö·û´®±íʾÐÎʽ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬ÇÒÉáÈëģʽΪ UNNECESSARY¡£
NumberFormatException - Èç¹û val ²»ÊÇ BigDecimal µÄÓÐЧ±íʾÐÎʽ¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(double val)
½« double ת»»Îª BigDecimal£¬ºóÕßÊÇ double µÄ¶þ½øÖƸ¡µãֵ׼ȷµÄÊ®½øÖƱíʾÐÎʽ¡£·µ»ØµÄ BigDecimal µÄ±ê¶ÈÊÇʹ (10scale × val) ΪÕûÊýµÄ×îСֵ¡£

×¢£º

  1. ´Ë¹¹Ôì·½·¨µÄ½á¹ûÓÐÒ»¶¨µÄ²»¿ÉÔ¤ÖªÐÔ¡£ÓÐÈË¿ÉÄÜÈÏΪÔÚ Java ÖÐдÈë new BigDecimal(0.1) Ëù´´½¨µÄ BigDecimal ÕýºÃµÈÓÚ 0.1£¨·Ç±ê¶ÈÖµ 1£¬Æä±ê¶ÈΪ 1£©£¬µ«ÊÇËüʵ¼ÊÉϵÈÓÚ 0.1000000000000000055511151231257827021181583404541015625¡£ÕâÊÇÒòΪ 0.1 ÎÞ·¨×¼È·µØ±íʾΪ double£¨»òÕß˵¶ÔÓÚ¸ÃÇé¿ö£¬²»ÄܱíʾΪÈκÎÓÐÏÞ³¤¶ÈµÄ¶þ½øÖÆÐ¡Êý£©¡£ÕâÑù£¬´«Èë µ½¹¹Ôì·½·¨µÄÖµ²»»áÕýºÃµÈÓÚ 0.1£¨ËäÈ»±íÃæÉϵÈÓÚ¸ÃÖµ£©¡£
  2. ÁíÒ»·½Ã棬String ¹¹Ôì·½·¨ÊÇÍêÈ«¿ÉÔ¤ÖªµÄ£ºÐ´Èë new BigDecimal("0.1") ½«´´½¨Ò»¸ö BigDecimal£¬ËüÕýºÃ µÈÓÚÔ¤ÆÚµÄ 0.1¡£Òò´Ë£¬±È½Ï¶øÑÔ£¬Í¨³£½¨ÒéÓÅÏÈʹÓà String ¹¹Ôì·½·¨¡£
  3. µ± double ±ØÐëÓÃ×÷ BigDecimal µÄԴʱ£¬Çë×¢Ò⣬´Ë¹¹Ôì·½·¨ÌṩÁËÒ»¸ö׼ȷת»»£»Ëü²»ÌṩÓëÒÔϲÙ×÷ÏàͬµÄ½á¹û£ºÏÈʹÓà Double.toString(double) ·½·¨£¬È»ºóʹÓà BigDecimal(String) ¹¹Ôì·½·¨£¬½« double ת»»Îª String¡£Òª»ñÈ¡¸Ã½á¹û£¬ÇëʹÓà static valueOf(double) ·½·¨¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ double Öµ¡£
Å׳ö£º
NumberFormatException - Èç¹û val ΪÎÞÇî´ó»ò NaN¡£

BigDecimal

public BigDecimal(double val,
                  MathContext mc)
½« double ת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£BigDecimal µÄ±ê¶ÈÊÇʹ (10scale × val) ΪÕûÊýµÄ×îСֵ¡£

´Ë¹¹Ôì·½·¨µÄ½á¹ûÓÐÒ»¶¨µÄ²»¿ÉÔ¤ÖªÐÔ£¬Í¨³£²»½¨ÒéʹÓÃËü£¬Çë²Î¼û BigDecimal(double) ¹¹Ôì·½·¨ÏÂÃæµÄ×¢ÊÍ¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ double Öµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇ RoundingMode Ϊ UNNECESSARY¡£
NumberFormatException - Èç¹û val ΪÎÞÇî´ó»ò NaN¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(BigInteger val)
½« BigInteger ת»»Îª BigDecimal¡£BigDecimal µÄ±ê¶ÈÊÇÁã¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ BigInteger Öµ¡£

BigDecimal

public BigDecimal(BigInteger val,
                  MathContext mc)
½« BigInteger ת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£BigDecimal µÄ±ê¶ÈΪÁã¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ BigInteger Öµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(BigInteger unscaledVal,
                  int scale)
½« BigInteger ·Ç±ê¶ÈÖµºÍ int ±ê¶Èת»»Îª BigDecimal¡£BigDecimal µÄֵΪ (unscaledVal × 10-scale)¡£

²ÎÊý£º
unscaledVal - BigDecimal µÄ·Ç±ê¶ÈÖµ¡£
scale - BigDecimal µÄ±ê¶È¡£

BigDecimal

public BigDecimal(BigInteger unscaledVal,
                  int scale,
                  MathContext mc)
½« BigInteger ·Ç±ê¶ÈÖµºÍ int ±ê¶Èת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£BigDecimal µÄֵΪ (unscaledVal × 10-scale)£¬ËüÊǸù¾Ý precision ºÍÉáÈëģʽÉèÖýøÐÐÉáÈëµÄ¡£

²ÎÊý£º
unscaledVal - BigDecimal µÄ·Ç±ê¶ÈÖµ¡£
scale - BigDecimal µÄ±ê¶È¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(int val)
½« int ת»»Îª BigDecimal¡£BigDecimal µÄ±ê¶ÈΪÁã¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ int Öµ¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(int val,
                  MathContext mc)
½« int ת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£ÔÚ½øÐÐÈκÎÉáÈë֮ǰ£¬BigDecimal µÄ±ê¶ÈΪÁã¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ int Öµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(long val)
½« long ת»»Îª BigDecimal¡£BigDecimal µÄ±ê¶ÈΪÁã¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ long Öµ¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

BigDecimal

public BigDecimal(long val,
                  MathContext mc)
½« long ת»»Îª BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£ÔÚ½øÐÐÈκÎÉáÈë֮ǰ£¬BigDecimal µÄ±ê¶ÈΪÁã¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ long Öµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5
·½·¨ÏêϸÐÅÏ¢

valueOf

public static BigDecimal valueOf(long unscaledVal,
                                 int scale)
½« long ·Ç±ê¶ÈÖµºÍ int ±ê¶Èת»»Îª BigDecimal¡£ÌṩµÄ´Ë“¾²Ì¬¹¤³§·½·¨”ÓÅÏÈÓÚ (long, int) ¹¹Ôì·½·¨£¬ÒòΪǰÕßÔÊÐíÖØÓþ­³£Ê¹ÓÃµÄ BigDecimal Öµ¡£

²ÎÊý£º
unscaledVal - BigDecimal µÄ·Ç±ê¶ÈÖµ¡£
scale - BigDecimal µÄ±ê¶È¡£
·µ»Ø£º
ÆäֵΪ (unscaledVal × 10-scale) µÄ BigDecimal¡£

valueOf

public static BigDecimal valueOf(long val)
½« long ֵת»»Îª¾ßÓÐÁã±ê¶ÈµÄ BigDecimal¡£ÌṩµÄ´Ë“¾²Ì¬¹¤³§·½·¨”ÓÅÏÈÓÚ (long) ¹¹Ôì·½·¨£¬ÒòΪǰÕßÔÊÐíÖØÓþ­³£Ê¹ÓÃµÄ BigDecimal Öµ¡£

²ÎÊý£º
val - BigDecimal 掙歜
·µ»Ø£º
ÆäֵΪ val µÄ BigDecimal¡£

valueOf

public static BigDecimal valueOf(double val)
ʹÓà Double.toString(double) ·½·¨ÌṩµÄ double ¹æ·¶µÄ×Ö·û´®±íʾÐÎʽ½« double ת»»Îª BigDecimal¡£

×¢£ºÕâͨ³£Êǽ« double£¨»ò float£©×ª»¯Îª BigDecimal µÄÊ×Ñ¡·½·¨£¬ÒòΪ·µ»ØµÄÖµµÈÓÚ´Ó¹¹Ôì BigDecimal£¨Ê¹Óà Double.toString(double) µÃµ½µÄ½á¹û£©µÃµ½µÄÖµ¡£

²ÎÊý£º
val - Ҫת»»Îª BigDecimal µÄ double¡£
·µ»Ø£º
ÆäÖµµÈÓÚ»òÔ¼µÈÓÚ val ÖµµÄ BigDecimal¡£
Å׳ö£º
NumberFormatException - Èç¹û val ΪÎÞÇî´ó»ò NaN¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

add

public BigDecimal add(BigDecimal augend)
·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this + augend)£¬Æä±ê¶ÈΪ max(this.scale(), augend.scale())¡£

²ÎÊý£º
augend - ½«Ìí¼Óµ½´Ë BigDecimal ÖеÄÖµ¡£
·µ»Ø£º
this + augend

add

public BigDecimal add(BigDecimal augend,
                      MathContext mc)
·µ»ØÆäֵΪ (this + augend) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£ Èç¹ûÈÎÒ»Êý×ÖΪÁ㣬²¢ÇÒ¾«¶ÈÉèÖÃΪ·ÇÁ㣬ÔòÆäËûÊý×Ö£¨±ØÒªÊ±½øÐÐÉáÈ룩¿ÉÒÔ×÷Ϊ½á¹û¡£

²ÎÊý£º
augend - ½«Ìí¼Óµ½´Ë BigDecimal ÖеÄÖµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
this + augend£¬±ØÒªÊ±½øÐÐÉáÈë¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

subtract

public BigDecimal subtract(BigDecimal subtrahend)
·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this - subtrahend)£¬Æä±ê¶ÈΪ max(this.scale(), subtrahend.scale())¡£

²ÎÊý£º
subtrahend - ´Ó´Ë BigDecimal ¼õÈ¥µÄÖµ¡£
·µ»Ø£º
this - subtrahend

subtract

public BigDecimal subtract(BigDecimal subtrahend,
                           MathContext mc)
·µ»ØÆäֵΪ (this - subtrahend) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£ Èç¹û subtrahend ΪÁ㣬Ôò½«Æä£¨±ØÒªÊ±½øÐÐÉáÈ룩×÷Ϊ½á¹û¡£Èç¹ûΪÁ㣬Ôò¸Ã½á¹ûÊÇ subtrahend.negate(mc)¡£

²ÎÊý£º
subtrahend - ´Ó´Ë BigDecimal ¼õÈ¥µÄÖµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
this - subtrahend£¬±ØÒªÊ±½øÐÐÉáÈë¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

multiply

public BigDecimal multiply(BigDecimal multiplicand)
·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this × multiplicand)£¬Æä±ê¶ÈΪ (this.scale() + multiplicand.scale())¡£

²ÎÊý£º
multiplicand - ³ËÒÔ´Ë BigDecimal µÄÖµ¡£
·µ»Ø£º
this * multiplicand

multiply

public BigDecimal multiply(BigDecimal multiplicand,
                           MathContext mc)
·µ»ØÆäֵΪ (this × multiplicand) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£

²ÎÊý£º
multiplicand - ³ËÒÔ´Ë BigDecimal µÄÖµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
±ØÒªÊ±ÉáÈëµÄ this * multiplicand¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

divide

public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         int roundingMode)
·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬Æä±ê¶ÈΪָ¶¨±ê¶È¡£Èç¹û±ØÐëÖ´ÐÐÉáÈ룬ÒÔÉú³É¾ßÓÐÖ¸¶¨±ê¶ÈµÄ½á¹û£¬ÔòÓ¦ÓÃÖ¸¶¨µÄÉáÈëģʽ¡£

Ïà¶ÔÓÚ´ËÒÅÁô·½·¨£¬Ó¦ÓÅÏÈʹÓÃÐ嵀 divide(BigDecimal, int, RoundingMode) ·½·¨¡£

²ÎÊý£º
divisor - ´Ë BigDecimal Òª³ýÒÔµÄÖµ¡£
scale - Òª·µ»ØµÄ BigDecimal É̵ıê¶È¡£
roundingMode - ÒªÓ¦ÓõÄÉáÈëģʽ¡£
·µ»Ø£º
this / divisor
Å׳ö£º
ArithmeticException - Èç¹û divisor ΪÁ㣬Ôò roundingMode==ROUND_UNNECESSARY ºÍÖ¸¶¨µÄ±ê¶È²»×ãÒÔ׼ȷµØ±íʾÏà³ýµÄ½á¹û¡£
IllegalArgumentException - Èç¹û roundingMode ²»±íʾһ¸öÓÐЧµÄÉáÈëģʽ¡£
ÁíÇë²Î¼û£º
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

divide

public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         RoundingMode roundingMode)
·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬Æä±ê¶ÈΪָ¶¨±ê¶È¡£Èç¹û±ØÐëÖ´ÐÐÉáÈ룬ÒÔÉú³É¾ßÓÐÖ¸¶¨±ê¶ÈµÄ½á¹û£¬ÔòÓ¦ÓÃÖ¸¶¨µÄÉáÈëģʽ¡£

²ÎÊý£º
divisor - ´Ë BigDecimal Òª³ýÒÔµÄÖµ¡£
scale - Òª·µ»ØµÄ BigDecimal É̵ıê¶È¡£
roundingMode - ÒªÓ¦ÓõÄÉáÈëģʽ¡£
·µ»Ø£º
this / divisor
Å׳ö£º
ArithmeticException - Èç¹û divisor ΪÁ㣬Ôò roundingMode==RoundingMode.UNNECESSARY ºÍÖ¸¶¨µÄ±ê¶È²»×ãÒÔ׼ȷµØ±íʾÏà³ýµÄ½á¹û¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

divide

public BigDecimal divide(BigDecimal divisor,
                         int roundingMode)
·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬Æä±ê¶ÈΪ this.scale()¡£Èç¹û±ØÐëÖ´ÐÐÉáÈ룬ÒÔÉú³É¾ßÓиø¶¨±ê¶ÈµÄ½á¹û£¬ÔòÓ¦ÓÃÖ¸¶¨µÄÉáÈëģʽ¡£

Ïà¶ÔÓÚ´ËÒÅÁô·½·¨£¬Ó¦ÓÅÏÈʹÓÃÐ嵀 divide(BigDecimal, RoundingMode) ·½·¨¡£

²ÎÊý£º
divisor - ´Ë BigDecimal Òª³ýÒÔµÄÖµ¡£
roundingMode - ÒªÓ¦ÓõÄÉáÈëģʽ¡£
·µ»Ø£º
this / divisor
Å׳ö£º
ArithmeticException - Èç¹û divisor==0 »òÕß roundingMode==ROUND_UNNECESSARY ºÍ this.scale() ²»×ãÒÔ׼ȷµØ±íʾÏà³ýµÄ½á¹û¡£
IllegalArgumentException - Èç¹û roundingMode ²»±íʾһ¸öÓÐЧµÄÉáÈëģʽ¡£
ÁíÇë²Î¼û£º
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

divide

public BigDecimal divide(BigDecimal divisor,
                         RoundingMode roundingMode)
·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬Æä±ê¶ÈΪ this.scale()¡£Èç¹û±ØÐëÖ´ÐÐÉáÈ룬ÒÔÉú³É¾ßÓиø¶¨±ê¶ÈµÄ½á¹û£¬ÔòÓ¦ÓÃÖ¸¶¨µÄÉáÈëģʽ¡£

²ÎÊý£º
divisor - ´Ë BigDecimal Òª³ýÒÔµÄÖµ¡£
roundingMode - ÒªÓ¦ÓõÄÉáÈëģʽ¡£
·µ»Ø£º
this / divisor
Å׳ö£º
ArithmeticException - Èç¹û divisor==0 »òÕß roundingMode==RoundingMode.UNNECESSARY ºÍ this.scale() ²»×ãÒÔ׼ȷµØ±íʾÏà³ýµÄ½á¹û¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

divide

public BigDecimal divide(BigDecimal divisor)
·µ»ØÒ»¸ö BigDecimal£¬ÆäֵΪ (this / divisor)£¬ÆäÊ×Ñ¡±ê¶ÈΪ (this.scale() - divisor.scale())£»Èç¹ûÎÞ·¨±íʾ׼ȷµÄÉÌÖµ£¨ÒòΪËüÓÐÎÞÇîµÄÊ®½øÖÆÀ©Õ¹£©£¬ÔòÅ׳ö ArithmeticException¡£

²ÎÊý£º
divisor - ´Ë BigDecimal ÒªÏà³ýµÄÖµ¡£
·µ»Ø£º
this / divisor
Å׳ö£º
ArithmeticException - Èç¹û׼ȷµÄÉÌֵûÓÐÎÞÇîµÄÊ®½øÖÆÀ©Õ¹
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

divide

public BigDecimal divide(BigDecimal divisor,
                         MathContext mc)
·µ»ØÆäֵΪ (this / divisor) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£

²ÎÊý£º
divisor - ´Ë BigDecimal Òª³ýÒÔµÄÖµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
this / divisor£¬±ØÒªÊ±½øÐÐÉáÈë¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY »ò mc.precision == 0£¬²¢ÇÒÉÌÖµ¾ßÓÐÎÞÇîµÄÊ®½øÖÆÀ©Õ¹¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

divideToIntegralValue

public BigDecimal divideToIntegralValue(BigDecimal divisor)
·µ»Ø BigDecimal£¬ÆäֵΪÏòÏÂÉáÈëËùµÃÉÌÖµ (this / divisor) µÄÕûÊý²¿·Ö¡£¸Ã½á¹ûµÄÊ×Ñ¡±ê¶ÈΪ (this.scale() - divisor.scale())¡£

²ÎÊý£º
divisor - ´Ë BigDecimal Òª³ýÒÔµÄÖµ¡£
·µ»Ø£º
this / divisor µÄÕûÊý²¿·Ö¡£
Å׳ö£º
ArithmeticException - Èç¹û divisor==0
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

divideToIntegralValue

public BigDecimal divideToIntegralValue(BigDecimal divisor,
                                        MathContext mc)
·µ»Ø BigDecimal£¬ÆäֵΪ (this / divisor) µÄÕûÊý²¿·Ö¡£ÒòΪ׼ȷÉÌÖµµÄÕûÊý²¿·ÖÓëÉáÈëģʽÎ޹أ¬ËùÒÔÉáÈëģʽ²»Ó°Ïì´Ë·½·¨·µ»ØµÄÖµ¡£¸Ã½á¹ûµÄÊ×Ñ¡±ê¶ÈÊÇ (this.scale() - divisor.scale())¡£Èç¹û׼ȷÉÌÖµµÄÕûÊý²¿·ÖÐèÒªµÄλÊý¶àÓÚ mc.precision£¬ÔòÅ׳ö ArithmeticException¡£

²ÎÊý£º
divisor - ´Ë BigDecimal ÒªÏà³ýµÄÖµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
this / divisor µÄÕûÊý²¿·Ö¡£
Å׳ö£º
ArithmeticException - Èç¹û divisor==0
ArithmeticException - Èç¹û mc.precision > 0£¬²¢ÇҸýá¹ûÐèÒªµÄ¾«¶È´óÓÚ mc.precision¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

remainder

public BigDecimal remainder(BigDecimal divisor)
·µ»ØÆäֵΪ (this % divisor) µÄ BigDecimal¡£

ÓàÊýÓÉ this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) ¸ø³ö¡£×¢Ò⣬Õâ²»ÊÇÄ£²Ù×÷£¨½á¹û¿ÉÒÔΪ¸º£©¡£

²ÎÊý£º
divisor - ´Ë BigDecimal Òª³ýÒÔµÄÖµ¡£
·µ»Ø£º
this % divisor¡£
Å׳ö£º
ArithmeticException - Èç¹û divisor==0
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

remainder

public BigDecimal remainder(BigDecimal divisor,
                            MathContext mc)
·µ»ØÆäֵΪ (this % divisor) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£MathContext ÉèÖûáÓ°ÏìÓÃÓÚ¼ÆËãÓàÊýµÄÒþʽ³ý·¨¡£ÓàÊý¼ÆËã±¾ÉíÒª½øÐÐ׼ȷµÄ¶¨Òå¡£Òò´Ë£¬ÓàÊý°üº¬µÄÊý×Ö¸öÊý¿ÉÄܶàÓÚ mc.getPrecision()¡£

ÓàÊýÓÉ this.subtract(this.divideToIntegralValue(divisor, mc).multiply(divisor)) ¸ø³ö¡£×¢Ò⣬Õâ²»ÊÇÄ£²Ù×÷£¨½á¹û¿ÉÒÔΪ¸º£©¡£

²ÎÊý£º
divisor - ´Ë BigDecimal ÒªÏà³ýµÄÖµ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
this % divisor£¬±ØÒªÊ±½øÐÐÉáÈë¡£
Å׳ö£º
ArithmeticException - Èç¹û divisor==0
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÉáÈëģʽΪ UNNECESSARY£¬»òÕß mc.precision > 0£¬²¢ÇÒ this.divideToIntgralValue(divisor) µÄ½á¹ûÒªÇóµÄ¾«¶È´óÓÚ mc.precision¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5
ÁíÇë²Î¼û£º
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)

divideAndRemainder

public BigDecimal[] divideAndRemainder(BigDecimal divisor)
·µ»ØÓÉÁ½¸öÔªËØ×é³ÉµÄ BigDecimal Êý×飬¸ÃÊý×é°üº¬ divideToIntegralValue µÄ½á¹û£¬ºó¸ú¶ÔÁ½¸ö²Ù×÷Êý¼ÆËãËùµÃµ½µÄ remainder¡£

×¢Ò⣬Èç¹ûͬʱÐèÒªÕûÊýÉ̺ÍÓàÊý£¬Ôò´Ë·½·¨±È·Ö±ðʹÓà divideToIntegralValue ºÍ remainder ·½·¨¸ü¿ìËÙ£¬ÒòΪÏà³ý½öÐèÖ´ÐÐÒ»´Î¡£

²ÎÊý£º
divisor - ´Ë BigDecimal ÒªÏà³ýµÄÖµºÍ¼ÆËãµÄÓàÊý¡£
·µ»Ø£º
ÓÉÁ½¸öÔªËØ×é³ÉµÄ BigDecimal Êý×飺ÉÌÖµ£¨divideToIntegralValue µÄ½á¹û£©ÊdzõÊ¼ÔªËØ£¬ÓàÊýÊÇ×îÖÕÔªËØ¡£
Å׳ö£º
ArithmeticException - Èç¹û divisor==0
´ÓÒÔϰ汾¿ªÊ¼£º
1.5
ÁíÇë²Î¼û£º
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext), remainder(java.math.BigDecimal, java.math.MathContext)

divideAndRemainder

public BigDecimal[] divideAndRemainder(BigDecimal divisor,
                                       MathContext mc)
·µ»ØÓÉÁ½¸öÔªËØ×é³ÉµÄ BigDecimal Êý×飬¸ÃÊý×é°üº¬ divideToIntegralValue µÄ½á¹û£¬ºó¸ú¸ù¾ÝÉÏÏÂÎÄÉèÖöÔÁ½¸ö²Ù×÷Êý½øÐÐÉáÈë¼ÆËãËùµÃµ½µÄ remainder µÄ½á¹û¡£

×¢Ò⣬Èç¹ûͬʱÐèÒªÕûÊýÉ̺ÍÓàÊý£¬Ôò´Ë·½·¨±È·Ö±ðʹÓà divideToIntegralValue ºÍ remainder ·½·¨¸ü¿ìËÙ£¬ÒòΪÏà³ý½öÐèÖ´ÐÐÒ»´Î¡£

²ÎÊý£º
divisor - ´Ë BigDecimal ÒªÏà³ýµÄÖµºÍ¼ÆËãµÄÓàÊý¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
ÓÉÁ½¸öÔªËØ×é³ÉµÄ BigDecimal Êý×飺ÉÌÖµ£¨divideToIntegralValue µÄ½á¹û£©ÊdzõÊ¼ÔªËØ£¬ÓàÊýÊÇ×îÖÕÔªËØ¡£
Å׳ö£º
ArithmeticException - Èç¹û divisor==0
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÉáÈëģʽΪ UNNECESSARY£¬»òÕß mc.precision > 0£¬²¢ÇÒ this.divideToIntgralValue(divisor) µÄ½á¹ûÒªÇóµÄ¾«¶È´óÓÚ mc.precision¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5
ÁíÇë²Î¼û£º
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext), remainder(java.math.BigDecimal, java.math.MathContext)

pow

public BigDecimal pow(int n)
·µ»ØÆäֵΪ (thisn) µÄ BigDecimal£¬×¼È·¼ÆËã¸ÃÃÝ£¬Ê¹Æä¾ßÓÐÎÞÏÞ¾«¶È¡£

²ÎÊý n ±ØÐëÔÚ 0 µ½ 999999999£¨°üÀ¨£©Ö®¼ä¡£ZERO.pow(0) ·µ»Ø ONE¡£ ×¢Ò⣬δÀ´°æ±¾¿ÉÄÜ»áÀ©Õ¹´Ë·½·¨ÔÊÐíµÄÖ¸Êý·¶Î§¡£

²ÎÊý£º
n - ´Ë BigDecimal µÄÃÝ¡£
·µ»Ø£º
thisn
Å׳ö£º
ArithmeticException - Èç¹û n ³¬³ö·¶Î§¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

pow

public BigDecimal pow(int n,
                      MathContext mc)
·µ»ØÆäֵΪ (thisn) µÄ BigDecimal¡£µ±Ç°ÊµÏÖʹÓõÄÊÇ ANSI ±ê×¼ X3.274-1996 Öж¨ÒåµÄºËÐÄËã·¨£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£Ò»°ãÇé¿öÏ£¬·µ»ØµÄÊýÖµÔÚ¾ßÓÐÑ¡Ôñ¾«¶ÈµÄ¾«È·ÊýÖµµÄÁ½¸ö ulp ÖС£×¢Ò⣬δÀ´°æ±¾¿ÉÒÔʹÓò»Í¬µÄËã·¨£¬ÒÔ¼õÉÙÔÊÐíµÄ´íÎó·¶Î§£¬²¢Ôö¼ÓÔÊÐíµÄÖ¸Êý·¶Î§¡£

X3.274-1996 Ë㷨Ϊ£º

²ÎÊý£º
n - ´Ë BigDecimal µÄÃÝ¡£
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
ʹÓà ANSI ±ê×¼ X3.274-1996 Ëã·¨µÄ thisn
Å׳ö£º
ArithmeticException - Èç¹û¸Ã½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY£¬»òÕß n ³¬³ö·¶Î§¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

abs

public BigDecimal abs()
·µ»Ø BigDecimal£¬ÆäֵΪ´Ë BigDecimal µÄ¾ø¶ÔÖµ£¬Æä±ê¶ÈΪ this.scale()¡£

·µ»Ø£º
abs(this)

abs

public BigDecimal abs(MathContext mc)
·µ»ØÆäֵΪ´Ë BigDecimal ¾ø¶ÔÖµµÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£

²ÎÊý£º
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
abs(this)£¬±ØÒªÊ±½øÐÐÉáÈë¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

negate

public BigDecimal negate()
·µ»Ø BigDecimal£¬ÆäֵΪ (-this)£¬Æä±ê¶ÈΪ this.scale()¡£

·µ»Ø£º
-this¡£

negate

public BigDecimal negate(MathContext mc)
·µ»ØÆäֵΪ (-this) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£

²ÎÊý£º
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
abs(this)£¬±ØÒªÊ±½øÐÐÉáÈë¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

plus

public BigDecimal plus()
·µ»Ø BigDecimal£¬ÆäֵΪ (+this)£¬Æä±ê¶ÈΪ this.scale()¡£

´Ë·½·¨½ö·µ»Ø´Ë BigDecimal£¬¸Ã·½·¨ÓëÒ»Ôª¼õ·½·¨ negate() ¶Ô³Æ¡£

·µ»Ø£º
this¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5
ÁíÇë²Î¼û£º
negate()

plus

public BigDecimal plus(MathContext mc)
·µ»ØÆäֵΪ (+this) µÄ BigDecimal£¨¸ù¾ÝÉÏÏÂÎÄÉèÖýøÐÐÉáÈ룩¡£

´Ë·½·¨µÄЧ¹ûÓë round(MathContext) ·½·¨µÄЧ¹ûÏàͬ¡£

²ÎÊý£º
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
this£¬±ØÒªÊ±½øÐÐÉáÈë¡£Áã½á¹û¾ßÓеıê¶ÈΪ 0¡£
Å׳ö£º
ArithmeticException - Èç¹û½á¹û²»×¼È·£¬µ«ÊÇÉáÈëģʽΪ UNNECESSARY¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5
ÁíÇë²Î¼û£º
round(MathContext)

signum

public int signum()
·µ»Ø´Ë BigDecimal µÄÕý¸ººÅº¯Êý¡£

·µ»Ø£º
µ±´Ë BigDecimal µÄֵΪ¸º¡¢Áã»òÕýʱ£¬·µ»Ø -1¡¢0 »ò 1¡£

scale

public int scale()
·µ»Ø´Ë BigDecimal µÄ±ê¶È¡£Èç¹ûΪÁã»òÕýÊý£¬Ôò±ê¶ÈÊÇСÊýµãºóµÄλÊý¡£Èç¹ûΪ¸ºÊý£¬Ôò½«¸ÃÊýµÄ·Ç±ê¶ÈÖµ³ËÒÔ 10 µÄ¸º scale ´ÎÃÝ¡£ÀýÈ磬-3 ±ê¶ÈÊÇÖ¸·Ç±ê¶ÈÖµ³ËÒÔ 1000¡£

·µ»Ø£º
´Ë BigDecimal µÄ±ê¶È¡£

precision

public int precision()
·µ»Ø´Ë BigDecimal µÄ¾«¶È¡££¨¾«¶ÈÊǷDZê¶ÈÖµµÄÊý×Ö¸öÊý¡££©

ÁãÖµµÄ¾«¶ÈÊÇ 1¡£

·µ»Ø£º
´Ë BigDecimal µÄ¾«¶È¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

unscaledValue

public BigInteger unscaledValue()
·µ»ØÆäֵΪ´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ µÄ BigInteger¡££¨¼ÆËã (this * 10this.scale())¡££©

·µ»Ø£º
´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.2

round

public BigDecimal round(MathContext mc)
·µ»Ø¸ù¾Ý MathContext ÉèÖýøÐÐÉáÈëºóµÄ BigDecimal¡£Èç¹û¾«¶ÈÉèÖÃΪ 0£¬Ôò²»½øÐÐÈκÎÉáÈë²Ù×÷¡£

´Ë·½·¨µÄЧ¹ûÓë plus(MathContext) ·½·¨µÄЧ¹ûÏàͬ¡£

²ÎÊý£º
mc - ҪʹÓõÄÉÏÏÂÎÄ¡£
·µ»Ø£º
¸ù¾Ý MathContext ÉèÖÃÉáÈëºóµÄ BigDecimal¡£
Å׳ö£º
ArithmeticException - Èç¹ûÉáÈëģʽΪ UNNECESSARY£¬²¢ÇÒ BigDecimal ²Ù×÷ÒªÇó½øÐÐÉáÈë¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5
ÁíÇë²Î¼û£º
plus(MathContext)

setScale

public BigDecimal setScale(int newScale,
                           RoundingMode roundingMode)
·µ»Ø BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬Æä·Ç±ê¶Èֵͨ¹ý´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ³ËÒÔ»ò³ýÒÔÊ®µÄÊʵ±´ÎÃÝÀ´È·¶¨£¬ÒÔά»¤Æä×ÜÖµ¡£Èç¹û¸Ã²Ù×÷¼õÉÙ±ê¶È£¬Ôò·Ç±ê¶ÈÖµ±ØÐë±»³ý£¨¶ø²»Êdzˣ©£¬²¢ÇÒ¸ÃÖµ¿ÉÒÔ¸ü¸Ä£»ÔÚÕâÖÖÇé¿öÏ£¬½«Ö¸¶¨µÄÉáÈëģʽӦÓõ½³ý·¨ÖС£

²ÎÊý£º
newScale - Òª·µ»ØµÄ BigDecimal ÖµµÄ±ê¶È¡£
roundingMode - ÒªÓ¦ÓõÄÉáÈëģʽ¡£
·µ»Ø£º
Ò»¸ö BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬Æä·Ç±ê¶ÈÖµ¿ÉÒÔͨ¹ý´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ³ËÒÔ»ò³ýÒÔÊ®µÄÊʵ±´ÎÃÝÀ´È·¶¨£¬ÒÔά»¤Æä×ÜÖµ¡£
Å׳ö£º
ArithmeticException - Èç¹û roundingMode==UNNECESSARY£¬²¢ÇÒÖ¸¶¨µÄ±ê¶È²Ù×÷ÒªÇó½øÐÐÉáÈë¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5
ÁíÇë²Î¼û£º
RoundingMode

setScale

public BigDecimal setScale(int newScale,
                           int roundingMode)
·µ»ØÒ»¸ö BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬Æä·Ç±ê¶Èֵͨ¹ý´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ³ËÒÔ»ò³ýÒÔÊ®µÄÊʵ±´ÎÃÝÀ´È·¶¨£¬ÒÔά»¤Æä×ÜÖµ¡£Èç¹û¸Ã²Ù×÷¼õÉÙ±ê¶È£¬Ôò·Ç±ê¶ÈÖµ±ØÐë±»³ý£¨¶ø²»Êdzˣ©£¬²¢ÇÒ¸ÃÖµ¿ÉÒÔ¸ü¸Ä£»ÔÚÕâÖÖÇé¿öÏ£¬½«Ö¸¶¨µÄÉáÈëģʽӦÓõ½³ý·¨ÖС£

×¢Ò⣬ÓÉÓÚ BigDecimal ¶ÔÏóÊDz»¿É±äµÄ£¬´Ë·½·¨µÄµ÷Óò»»á µ¼Ö³õʼ¶ÔÏó±»Ð޸ģ¬ÕâÓëʹÓÃÃûΪ setX ±äÒì×Ö¶Î X ·½·¨µÄ³£¹æÔ¼¶¨Ïà·´¡£Ïà·´£¬setScale ·µ»Ø¾ßÓÐÊʵ±±ê¶ÈµÄ¶ÔÏó£»·µ»ØµÄ¶ÔÏó²»Ò»¶¨ÊÇзÖÅäµÄ¡£

Ïà¶ÔÓÚ´ËÒÅÁô·½·¨£¬Ó¦ÓÅÏÈʹÓÃÐ嵀 setScale(int, RoundingMode) ·½·¨¡£

²ÎÊý£º
newScale - Òª·µ»ØµÄ BigDecimal ÖµµÄ±ê¶È¡£
roundingMode - ÒªÓ¦ÓõÄÉáÈëģʽ¡£
·µ»Ø£º
Ò»¸ö BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬Æä·Ç±ê¶ÈÖµ¿ÉÒÔͨ¹ý´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ³ËÒÔ»ò³ýÒÔÊ®µÄÊʵ±´ÎÃÝÀ´È·¶¨¡£
Å׳ö£º
ArithmeticException - Èç¹û roundingMode==ROUND_UNNECESSARY£¬²¢ÇÒÖ¸¶¨µÄ±ê¶È²Ù×÷ÒªÇó½øÐÐÉáÈë¡£
IllegalArgumentException - Èç¹û roundingMode ²»±íʾһ¸öÓÐЧµÄÉáÈëģʽ¡£
ÁíÇë²Î¼û£º
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

setScale

public BigDecimal setScale(int newScale)
·µ»ØÒ»¸ö BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬ÆäÖµÔÚÊýÖµÉϵÈÓÚ´Ë BigDecimal µÄÖµ¡£Èç¹ûÕâ²»¿ÉÄÜ£¬ÔòÅ׳ö ArithmeticException¡£

´Ëµ÷ÓÃͨ³£ÓÃÓÚÔö¼Ó±ê¶È£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÉÒÔ±£Ö¤´æÔÚÖ¸¶¨±ê¶ÈºÍÕýÈ·ÖµµÄ BigDecimal¡£Èç¹ûµ÷Ó÷½ÖªµÀ BigDecimalÔÚÆäСÊý²¿·ÖµÄ½áβÓÐ×ã¹»¶àµÄÁ㣨¼´ÆäÕûÊýÖµÖеÄÊ®µÄÒò×Ó£©£¬Ôò¸Ãµ÷ÓÃÒ²¿ÉÓÃÓÚ¼õÉÙ±ê¶È£¬ÒÔÔÊÐíÖØÐ±ê¶È£¬¶ø²»¸ü¸ÄÆäÖµ¡£

´Ë·½·¨·µ»ØÓë setScale µÄÁ½¸ö²ÎÊý°æ±¾ÏàͬµÄ½á¹û£¬µ«ÊÇ£¬Îªµ÷Ó÷½Ê¡È¥ÁËÖ¸¶¨ÉáÈëģʽµÄÂé·³£¨ÉáÈëģʽ²»Ó°Ïì½á¹û£©¡£

×¢Ò⣬ÓÉÓÚ BigDecimal ¶ÔÏóÊDz»¿É±äµÄ£¬Òò´Ë´Ë·½·¨µÄµ÷Óò»»á µ¼Ö³õʼ¶ÔÏó±»Ð޸ģ¬ÕâÓëʹÓÃÃûΪ setX ±äÒì×Ö¶Î X ·½·¨µÄ³£¹æÔ¼¶¨Ïà·´¡£Ïà·´£¬setScale ·µ»Ø¾ßÓÐÊʵ±±ê¶ÈµÄ¶ÔÏó£»·µ»ØµÄ¶ÔÏó²»Ò»¶¨ÊÇзÖÅäµÄ¡£

²ÎÊý£º
newScale - Òª·µ»ØµÄ BigDecimal ÖµµÄ±ê¶È¡£
·µ»Ø£º
Ò»¸ö BigDecimal£¬Æä±ê¶ÈΪָ¶¨Öµ£¬Æä·Ç±ê¶ÈÖµ¿ÉÒÔͨ¹ý´Ë BigDecimal µÄ·Ç±ê¶ÈÖµ³ËÒÔ»ò³ýÒÔÊ®µÄÊʵ±´ÎÃÝÀ´È·¶¨£¬ÒÔά»¤Æä×ÜÖµ¡£
Å׳ö£º
ArithmeticException - Èç¹ûÖ¸¶¨µÄ±ê¶È²Ù×÷ÒªÇó½øÐÐÉáÈë¡£
ÁíÇë²Î¼û£º
setScale(int, int), setScale(int, RoundingMode)

movePointLeft

public BigDecimal movePointLeft(int n)
·µ»ØÒ»¸ö BigDecimal£¬ËüµÈЧÓÚ½«¸ÃÖµµÄСÊýµãÏò×óÒÆ¶¯ n λ¡£Èç¹û n Ϊ·Ç¸ºÊý£¬Ôòµ÷Óýö½« n Ìí¼Óµ½¸Ã±ê¶È¡£Èç¹û n Ϊ¸ºÊý£¬Ôò¸Ãµ÷ÓõÈЧÓÚ movePointRight(-n)¡£´Ëµ÷Ó÷µ»ØµÄ BigDecimal µÄֵΪ (this × 10-n)£¬±ê¶ÈΪ max(this.scale()+n, 0)¡£

²ÎÊý£º
n - ½«Ð¡ÊýµãÏò×óÒÆ¶¯µÄλÊý¡£
·µ»Ø£º
Ò»¸ö BigDecimal£¬ËüµÈЧÓÚ½«¸ÃÖµµÄСÊýµãÏò×óÒÆ¶¯ n λ¡£
Å׳ö£º
ArithmeticException - Èç¹û±ê¶ÈÒç³ö¡£

movePointRight

public BigDecimal movePointRight(int n)
·µ»ØÒ»¸ö BigDecimal£¬ËüµÈЧÓÚ½«¸ÃÖµµÄСÊýµãÏòÓÒÒÆ¶¯ n λ¡£Èç¹û n Ϊ·Ç¸ºÊý£¬Ôò¸Ãµ÷Óýö´Ó¸Ã±ê¶È¼õÈ¥ n¡£Èç¹û n Ϊ¸º£¬Ôò¸Ãµ÷ÓõÈЧÓÚ movePointLeft(-n)¡£´Ëµ÷Ó÷µ»ØµÄ BigDecimal µÄֵΪ (this × 10n)£¬±ê¶ÈΪ max(this.scale()-n, 0)¡£

²ÎÊý£º
n - ½«Ð¡ÊýµãÏòÓÒÒÆ¶¯µÄλÊý¡£
·µ»Ø£º
Ò»¸ö BigDecimal£¬ËüµÈЧÓÚ½«¸ÃÖµµÄСÊýµãÏòÓÒÒÆ¶¯ n λ¡£
Å׳ö£º
ArithmeticException - Èç¹û±ê¶ÈÒç³ö¡£

scaleByPowerOfTen

public BigDecimal scaleByPowerOfTen(int n)
·µ»ØÆäÊýÖµµÈÓÚ (this * 10n) µÄ BigDecimal¡£¸Ã½á¹ûµÄ±ê¶ÈΪ (this.scale() - n)¡£

Å׳ö£º
ArithmeticException - Èç¹û¸Ã±ê¶ÈµÄ·¶Î§³¬³ö 32 λÕûÊýµÄ·¶Î§¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

stripTrailingZeros

public BigDecimal stripTrailingZeros()
·µ»ØÊýÖµÉϵÈÓÚ´ËСÊý£¬µ«´Ó¸Ã±íʾÐÎÊ½ÒÆ³ýËùÓÐβ²¿ÁãµÄ BigDecimal¡£ÀýÈ磬´Ó BigDecimal Öµ 600.0 ÖÐÒÆ³ýβ²¿Á㣬¸ÃÖµ¾ßÓÐµÄ [BigInteger, scale] ×é¼þµÈÓÚ [6000, 1]£¬Ê¹Óà [BigInteger, scale] ×é¼þÉú³ÉµÄ 6E2 µÈÓÚ [6, -2]

·µ»Ø£º
ÊýÖµÉϵÈÓÚÒÆ³ýËùÓÐβ²¿ÁãµÄ BigDecimal¡£
´ÓÒÔϰ汾¿ªÊ¼£º
1.5

compareTo

public int compareTo(BigDecimal val)
½«´Ë BigDecimal ÓëÖ¸¶¨µÄ BigDecimal ±È½Ï¡£¸ù¾Ý´Ë·½·¨£¬ÖµÏàµÈµ«¾ßÓв»Í¬±ê¶ÈµÄÁ½¸ö BigDecimal ¶ÔÏó£¨È磬2.0 ºÍ 2.00£©±»ÈÏΪÊÇÏàµÈµÄ¡£Ïà¶ÔÁù¸ö boolean ±È½ÏÔËËã·û (<, ==, >, >=, !=, <=) ÖÐÿһ¸öÔËËã·ûµÄ¸÷¸ö·½·¨£¬ÓÅÏÈÌṩ´Ë·½·¨¡£½¨ÒéʹÓÃÒÔÏÂÓï¾äÖ´ÐÐÉÏÊö±È½Ï£º(x.compareTo(y) <op> 0)£¬ÆäÖÐ <op> ÊÇÁù¸ö±È½ÏÔËËã·ûÖ®Ò»¡£

Ö¸¶¨Õߣº
½Ó¿Ú Comparable<BigDecimal> ÖÐµÄ compareTo
²ÎÊý£º
val - ½«´Ë BigDecimal ÓëÖ®±È½ÏµÄ BigDecimal¡£
·µ»Ø£º
µ±´Ë BigDecimal ÔÚÊý×ÖÉÏСÓÚ¡¢µÈÓÚ»ò´óÓÚ val ʱ£¬·µ»Ø -1¡¢0 »ò 1¡£

equals

public boolean equals(Object x)
±È½Ï´Ë BigDecimal ÓëÖ¸¶¨µÄ Object µÄÏàµÈÐÔ¡£Óë compareTo ²»Í¬£¬½öµ±Á½¸ö BigDecimal ¶ÔÏóµÄÖµºÍ±ê¶È¶¼ÏàµÈʱ£¬´Ë·½·¨²ÅÈÏΪËüÃÇÏàµÈ£¨Òò´Ëͨ¹ý´Ë·½·¨½øÐбȽÏʱ£¬2.0 ²»µÈÓÚ 2.00£©¡£

¸²¸Ç£º
Àà Object ÖÐµÄ equals
²ÎÊý£º
x - ½«Óë´Ë BigDecimal ½øÐÐ±È½ÏµÄ Object¡£
·µ»Ø£º
µ±ÇÒ½öµ±Ö¸¶¨µÄ Object Ϊ BigDecimal£¬²¢ÇÒÆäÖµºÍ±ê¶È¶¼µÈÓÚ´Ë BigDecimal µÄÖµºÍ±ê¶Èʱ£¬·µ»Ø true¡£
ÁíÇë²Î¼û£º
compareTo(java.math.BigDecimal), hashCode()

min

public BigDecimal min(BigDecimal val)
·µ»Ø´Ë BigDecimal ºÍ val µÄ×îСֵ¡£

²ÎÊý£º
val - Òª¼ÆËã×îСֵµÄÖµ¡£
·µ»Ø£º
ÆäֵΪ BigDecimal ºÍ val ÖнÏСֵµÄ BigDecimal¡£¸ù¾Ý compareTo ·½·¨µÄ¶¨Ò壬Èç¹ûËüÃÇÏàµÈ£¬Ôò·µ»Ø this¡£
ÁíÇë²Î¼û£º
compareTo(java.math.BigDecimal)

max

public BigDecimal max(BigDecimal val)
·µ»Ø´Ë BigDecimal ºÍ val µÄ×î´óÖµ¡£

²ÎÊý£º
val - Òª¼ÆËã×î´óÖµµÄÖµ¡£
·µ»Ø£º
ÆäֵΪ´Ë BigDecimal ºÍ val ÖнϴóÖµµÄ BigDecimal¡£¸ù¾Ý compareTo ·½·¨µÄ¶¨Ò壬Èç¹ûËüÃÇÏàµÈ£¬Ôò·µ»Ø this¡£
ÁíÇë²Î¼û£º
compareTo(java.math.BigDecimal)

hashCode

public int hashCode()
·µ»Ø´Ë BigDecimal µÄ¹þÏ£Âë¡£×¢Ò⣬ÊýÖµÉÏÏàµÈµ«±ê¶È²»Í¬µÄÁ½¸ö BigDecimal ¶ÔÏó£¨È磬2.0 ºÍ 2.00£©Í¨³£Ã»ÓÐ ÏàͬµÄ¹þÏ£Âë¡£

¸²¸Ç£º
Àà Object ÖÐµÄ hashCode
·µ»Ø£º
´Ë BigDecimal µÄ¹þÏ£Âë¡£
ÁíÇë²Î¼û£º
equals(Object)

toString

public String toString()
·µ»Ø´Ë BigDecimal µÄ×Ö·û´®±íʾÐÎʽ£¬Èç¹ûÐèÒªÖ¸Êý£¬ÔòʹÓÿÆÑ§¼ÇÊý·¨¡£

¸ù¾ÝÒÔϲ½Öè¿É´´½¨ BigDecimal µÄ±ê×¼µÄ¹æ·¶»¯×Ö·û´®ÐÎʽ£ºÊ×ÏÈ£¬Ê¹Óò»´øÇ°µ¼ÁãµÄ×Ö·û '0' ÖÁ '9'£¨Èç¹ûÆäֵΪÁ㣬ÔòʹÓõ¥¸ö '0' ×Ö·û£©½« BigDecimal µÄ·Ç±ê¶ÈÖµµÄ¾ø¶Ôֵת»»ÎªÒÔʮΪ»ùÊýµÄ×Ö·û´®¡£

Æä´Î£¬¼ÆËãµ÷ÕûµÄÖ¸Êý£»ÕâÊÇÎÞЧµÄ±ê¶È£¬¼ÓÉÏת»»µÄ·Ç±ê¶ÈÖµÖеÄ×Ö·ûÊý¼õ 1¡£¼´£º-scale+(ulength-1)£¬ÆäÖÐ ulength ÊÇÊ®½øÖÆÊý×ÖÖзDZê¶ÈÖµµÄ¾ø¶ÔÖµµÄ³¤¶È£¨Æä¾«¶È£©¡£

Èç¹û¸Ã±ê¶È´óÓÚ»òµÈÓÚÁ㣬²¢ÇÒµ÷ÕûµÄÖ¸Êý´óÓÚ»òµÈÓÚ -6£¬ÔòÔÚ²»Ê¹ÓÃÖ¸Êý¼ÇÊý·¨µÄÇé¿öϽ«¸ÃÊýת»»Îª×Ö·ûÐÎʽ¡£ÔÚÕâÖÖÇé¿öÏ£¬Èç¹û±ê¶ÈΪÁ㣬Ôò²»Ìí¼ÓСÊýµã£¬Èç¹û±ê¶ÈΪÕýÊý£¬Ôò²åÈëСÊýµã£¬ÇÒ±ê¶ÈÖ¸¶¨ÁËСÊýµãÓұߵÄ×Ö·û¸öÊý¡£±ØÒªÊ±£¬½«×Ö·û '0' Ìí¼Óµ½×ª»»µÄ·Ç±ê¶ÈÖµµÄ×ó±ß¡£Èç¹û²åÈëºóСÊýµãÇ°ÃæÃ»ÓÐ×Ö·û£¬ÔòÒÔ´«Í³×Ö·û '0' Ϊǰ׺¡£

·ñÔò£¨¼´£ºÈç¹û±ê¶ÈΪ¸ºÊý£¬»òÕßµ÷ÕûµÄÖ¸ÊýСÓÚ -6£©£¬Ê¹ÓÃÖ¸Êý¼ÇÊý·¨½«¸ÃÊýת»»Îª×Ö·ûÐÎʽ¡£ÔÚÕâÖÖÇé¿öÏ£¬Èç¹ûת»»ºóµÄ BigInteger ¶àÓÚһλÊý£¬ÔòСÊýµã²åÈëÔÚµÚÒ»¸öÊý×ÖÖ®ºó¡£È»ºó£¬½«×Ö·ûÐÎʽµÄÖ¸Êý×÷Ϊת»»µÄ·Ç±ê¶ÈÖµ£¨Ò²Ðí¾ßÓвåÈëµÄСÊýµã£©µÄºó׺£»Õâ°üº¬×Öĸ 'E' ºÍÖ±½Ó¸úÔÚÆäºóµÄת»»Îª×Ö·ûÐÎʽµÄµ÷ÕûÖ¸Êý¡£ºóÕߵĻùÊýΪʮ£¬Ê¹ÓõÄ×Ö·ûÊÇ '0' µ½ '9'£¬Ã»ÓÐǰµ¼Á㣬²¢ÇÒ£¬Èç¹ûµ÷ÕûµÄÖ¸ÊýΪ¸ºÊý£¬Ôò×ÜÊÇÒÔ·ûºÅ×Ö·û '-' ('\u002D') Ϊǰ׺£¬·ñÔòÒÔ '+' ('\u002B') Ϊǰ׺¡£

×îºó£¬Èç¹û·Ç±ê¶ÈֵСÓÚÁ㣬ÔòÕû¸ö×Ö·û´®ÒÔ¼õºÅ '-' ('\u002D') Ϊǰ׺¡£Èç¹û·Ç±ê¶ÈֵΪÁã»òÕýÊý£¬Ôò²»Ê¹Ó÷ûºÅ×Ö·û×÷Ϊǰ׺¡£

ʾÀý£º

¶ÔÓÚ×ó±ßµÄÿ¸ö±íʾÐÎʽ [unscaled value, scale]£¬µÃµ½µÄ×Ö·û´®ÏÔʾÔÚÓұߡ£

 [123,0]      "123"
 [-123,0]     "-123"
 [123,-1]     "1.23E+3"
 [123,-3]     "1.23E+5"
 [123,1]      "12.3"
 [123,5]      "0.00123"
 [123,10]     "1.23E-8"
 [-123,12]    "-1.23E-10"
 
×¢£º
  1. ¿ÉÇø·ÖµÄ BigDecimal ÖµºÍ´Ëת»»µÄ½á¹ûÖ®¼ä´æÔÚÒ»¶ÔÒ»µÄÓ³Éä¹ØÏµ¡£¼´£ºÃ¿¸ö¿ÉÇø·ÖµÄ BigDecimal Öµ£¨·Ç±ê¶ÈÖµºÍ±ê¶È£