package Ġio . arc block . wallet kit . utils Ċ Ċ import Ġio . arc block . wallet kit . utils . Arc Input Check Utils . getMin Scale Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ import Ġjava . math . Round ingMode . DOWN Ċ import Ġjava . text . Decimal Format Ċ import Ġkotlin . math . pow Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠN ate Ġon Ġ 2 0 1 8 / 1 2 / 5 Ċ Ġ*/ Ċ object ĠArc Number Utils Ġ{ ĊĊĠ Ġfun Ġformat Number For Token Display ( number : ĠString ?, Ġdecimals : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġnumber Decimal Ġ= Ġstring 2 BigDecimal With Scale ( number Ġ?: Ġ" 0 ", Ġdecimals ) ĊĠĠĠ Ġreturn Ġformat Number For Token Display ( number Decimal ) ĊĠ Ġ} ĊĊĠ Ġfun Ġformat Number For Token Display ( number : ĠBigInteger , Ġdecimals : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġnumber Decimal Ġ= Ġstring 2 BigDecimal With Scale ( number , Ġdecimals ) ĊĠĠĠ Ġreturn Ġformat Number For Token Display ( number Decimal ) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġformat Number For Token Display ( number : ĠBigDecimal ?): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( number Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ" 0 " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġnf Ġ= ĠDecimal Format ("# , ## 0 . 0 0 0 0 0 0 ") ĊĠĠĠ Ġnf . rounding Mode Ġ= ĠDOWN ĊĠĠĠ Ġreturn Ġremove The End Zero ( nf . format ( number )) ĊĠ Ġ} ĊĠ Ġ/** ĊĠĠ Ġ* Ġ********************************************************* ** ĊĠĠ Ġ*/ ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ********* * Ġ æł¼å¼ı åĮĸ Ġtoken Ġnumber Ġä¸º æ³ķ å¸ģ å±ķç¤º çĶ¨çļĦ æł·å¼ı Ġ***************** * ĊĠĠ Ġ*/ ĊĠ Ġfun Ġformat Number For Fi at Display ( number : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval Ġnumber BigDecimal Ġ= Ġtry Ġ{ ĊĠĠĠĠĠ ĠBigDecimal ( number ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠBigDecimal . ZERO ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġformat Number For Fi at Display ( number BigDecimal ) ĊĠ Ġ} ĊĊĠ Ġfun Ġformat Number For Fi at Display ( number : ĠBigDecimal ): ĠString Ġ{ ĊĠĠĠ Ġval Ġformat Ġ= Ġ"# , ## 0 . 0 0 " ĊĠĠĠ Ġval Ġnf Ġ= ĠDecimal Format ( format ) ĊĠĠĠ Ġnf . rounding Mode Ġ= ĠDOWN ĊĠĠĠ Ġreturn Ġnf . format ( number ) ĊĠ Ġ} ĊĠ Ġ/** ĊĠĠ Ġ* Ġ********************************************************* ** ĊĠĠ Ġ*/ ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ********* * Ġ æł¼å¼ı åĮĸ Ġtoken Ġnumber Ġä¸º è¾ĵåħ¥ æ¡Ĩ çĶ¨çļĦ æł¼å¼ı Ġ***************** * ĊĠĠ Ġ*/ ĊĠ Ġfun Ġformat Number For Send ( number : ĠString , Ġdecimals : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġnumber Decimal Ġ= Ġstring 2 BigDecimal With Scale ( number , Ġdecimals ) ĊĠĠĠ Ġreturn Ġformat Number For Send ( number Decimal ) ĊĠ Ġ} ĊĊĠ Ġfun Ġformat Number For Send ( number : ĠBigDecimal , Ġdecimals : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġnumber Decimal Ġ= Ġstring 2 BigDecimal With Scale ( number , Ġdecimals ) ĊĠĠĠ Ġreturn Ġformat Number For Send ( number Decimal ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġformat Number For Send ( number : ĠBigDecimal ): ĠString Ġ{ ĊĠĠĠ Ġval Ġformat Ġ= Ġ" ## 0 . 0 0 0 0 0 0 " ĊĠĠĠ Ġval Ġnf Ġ= ĠDecimal Format ( format ) ĊĠĠĠ Ġnf . rounding Mode Ġ= ĠDOWN ĊĠĠĠ Ġreturn Ġremove The End Zero ( nf . format ( number )) ĊĠ Ġ} ĊĠ Ġ/** ĊĠĠ Ġ* Ġ********************************************************* ** ĊĠĠ Ġ*/ ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ********* * ĠString Ġ ç±»åŀĭçļĦ æķ°åŃĹ è½¬æį¢ ä¸º åİ» éĻ¤ ç²¾ åº¦ çļĦ ĠBigDecimal Ġ***************** * ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstring 2 BigDecimal With Out Scale ( number : ĠString , Ġdecimals : ĠInt ): ĠBigDecimal Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ ĠBigDecimal ( number ). divide ( BigDecimal . valueOf ( 1 0 . 0 . pow ( decimals . toDouble ()))) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠBigDecimal . ZERO ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ********* * ĠBigInteger Ġ ç±»åŀĭçļĦ æķ°åŃĹ è½¬æį¢ ä¸º åİ» éĻ¤ ç²¾ åº¦ çļĦ ĠBigDecimal Ġ***************** * ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstring 2 BigDecimal With Out Scale ( number : ĠBigInteger , Ġdecimals : ĠInt ): ĠBigDecimal Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ ĠBigDecimal ( number ). divide ( BigDecimal . valueOf ( 1 0 . 0 . pow ( decimals . toDouble ()))) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠBigDecimal . ZERO ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ********* * ĠString Ġ ç±»åŀĭçļĦ æķ°åŃĹ è½¬ ä¸º åİ» éĻ¤ ç²¾ åº¦ çļĦ ĠBigDecimal Ġ å¹¶ æĪª åıĸ ä¸Ģ å®ļçļĦ å°ı æķ° çĤ¹ ä½į æķ° Ġ***************** * ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġstring 2 BigDecimal With Scale ( number : ĠString ?, Ġdecimals : ĠInt ): ĠBigDecimal Ġ{ ĊĠĠĠ Ġ// Ġ ç¡® ä¿Ŀ æŀĦå»º ĠBigDecimal Ġ èĥ½ æĪĲåĬŁ ï¼Į ä¸į æĪĲåĬŁ ï¼Į é»ĺè®¤ä¸º Ġ 0 ĊĠĠĠ Ġval Ġnumber BigDecimal Ġ= Ġtry Ġ{ ĊĠĠĠĠĠ ĠBigDecimal ( number ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠBigDecimal . ZERO ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġstring 2 BigDecimal With Scale ( number BigDecimal , Ġdecimals ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ********* * ĠBigInteger Ġ ç±»åŀĭçļĦ æķ°åŃĹ è½¬ ä¸º åİ» éĻ¤ ç²¾ åº¦ çļĦ ĠBigDecimal Ġ å¹¶ æĪª åıĸ ä¸Ģ å®ļçļĦ å°ı æķ° çĤ¹ ä½į æķ° Ġ***************** * ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstring 2 BigDecimal With Scale ( number : ĠBigInteger ?, Ġdecimals : ĠInt ): ĠBigDecimal Ġ{ ĊĠĠĠ Ġ// Ġ ç¡® ä¿Ŀ æŀĦå»º ĠBigDecimal Ġ èĥ½ æĪĲåĬŁ ï¼Į ä¸į æĪĲåĬŁ ï¼Į é»ĺè®¤ä¸º Ġ 0 ĊĠĠĠ Ġval Ġnumber BigDecimal Ġ= Ġtry Ġ{ ĊĠĠĠĠĠ ĠBigDecimal ( number ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠBigDecimal . ZERO ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġstring 2 BigDecimal With Scale ( number BigDecimal , Ġdecimals ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ********* * ĠBigDecimal Ġ åİ» éĻ¤ ç²¾ åº¦ å¹¶ æĪª åıĸ ä¸Ģ å®ļçļĦ å°ı æķ° çĤ¹ ä½į æķ° Ġ***************** * ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstring 2 BigDecimal With Scale ( number : ĠBigDecimal , Ġdecimals : ĠInt ): ĠBigDecimal Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġbig Decimal Number Ġ= Ġnumber . divide ( BigDecimal . valueOf ( 1 0 . 0 . pow ( decimals ))) ĊĠĠĠĠĠ Ġ// Ġé»ĺè®¤ æĪª åıĸ Ġ 6 Ġ ä½į ï¼Į å¦Ĥæŀľ Ġdecimals Ġå°ı äºİ Ġ 6 ï¼Į åĪĻ åıĸ Ġdecimals ĊĠĠĠĠĠ Ġbig Decimal Number . set Scale ( getMin Scale ( decimals ), ĠBigDecimal . ROUND _ DOWN ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠBigDecimal . ZERO ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġstring 2 Int ( number : ĠString ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( isEmpty ( number )) Ġ{ ĊĠĠĠĠĠĠ 0 ĊĠĠĠ Ġ} Ġelse Ġtry Ġ{ ĊĠĠĠĠĠ Ġnumber . toInt () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠ 0 ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġstring To BigDecimal ( number : ĠString ?): ĠBigDecimal Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( isEmpty ( number )) Ġ{ ĊĠĠĠĠĠ ĠBigDecimal . ZERO ĊĠĠĠ Ġ} Ġelse Ġtry Ġ{ ĊĠĠĠĠĠ ĠBigDecimal ( number ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠBigDecimal . ZERO ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// big Ġinteger Ġto ĠUint 6 4 ĊĠ Ġfun Ġunsigned ( b : ĠBigInteger ): ĠBigInteger Ġ{ ĊĠĠĠ Ġif Ġ( b . sign um () Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġb ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġa 1 Ġ= Ġb . toByteArray () ĊĠĠĠ Ġval Ġa 2 Ġ= ĠByteArray ( a 1 . size Ġ+ Ġ 1 ) ĊĠĠĠ Ġa 2 [ 0 ] Ġ= Ġ 0 ĊĠĠĠ ĠSystem . arraycopy ( a 1 , Ġ 0 , Ġa 2 , Ġ 1 , Ġa 1 . size ) ĊĠĠĠ Ġreturn ĠBigInteger ( a 2 ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġremove The End Zero ( input : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĠĠĠ Ġresult Ġ= Ġif Ġ(! isEmpty ( input )) Ġ{ ĊĠĠĠĠĠ Ġinput ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ" 0 " ĊĠĠĠ Ġ} ĊĠĠĠ Ġwhile Ġ( result . endsWith (" 0 ")) Ġ{ ĊĠĠĠĠĠ Ġresult Ġ= Ġresult . substring ( 0 , Ġresult . length Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( result . endsWith (". ")) Ġ{ ĊĠĠĠĠĠ Ġresult Ġ= Ġresult . substring ( 0 , Ġresult . length Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġfun Ġcheck Can Parse StringTo BigDecimal ( number : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ ĠBigDecimal ( number ) ĊĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġcheck Can Parse String ToInt ( number : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġnumber !!. toInt () ĊĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠisEmpty ( str : ĠCharSequence ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġstr Ġ== Ġnull Ġ|| Ġstr . isEmpty () ĊĠ Ġ} Ċ } Ċ