package Ġcom . dg . eval Ċ Ċ import Ġjava . text . NumberFormat Ċ import Ġjava . util .* Ċ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ object ĠString Conversion Ċ { ĊĠĠĠ Ġfun Ġguess Number Comma ( value : ĠString , Ġallow Th ous ands : ĠBoolean ): ĠBoolean ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs val Ġ= Ġvalue . trim () ĊĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġvalue . indexOf ('.') ĊĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġif Ġ( p 1 Ġ== Ġ- 1 ) Ġnull Ġelse Ġvalue . lastIndexOf ('.') ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġs val . indexOf (',') ĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġif Ġ( c 1 Ġ== Ġ- 1 ) Ġnull Ġelse Ġvalue . lastIndexOf (',') ĊĠĠĠĠĠĠĠ Ġval Ġhas Sign Ġ= Ġvalue . isNotEmpty () Ġ&& Ġ( s val . startsWith ("- ") Ġ|| Ġs val . startsWith ("+ ")) ĊĠĠĠĠĠĠĠ Ġval Ġlen No Sign Ġ= Ġif Ġ( has Sign ) Ġvalue . length Ġ- Ġ 1 Ġelse Ġvalue . length ĊĊĠĠĠĠĠĠĠ Ġval Ġis Comma Based : ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġif Ġ( c 1 Ġ!= Ġ- 1 Ġ&& Ġp 1 Ġ!= Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwho 's Ġlast ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comma Based Ġ= Ġc 2 !! Ġ> Ġp 2 !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( c 1 Ġ!= Ġc 2 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġcommas , Ġmust Ġbe Ġthousands ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comma Based Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( p 1 Ġ!= Ġp 2 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġperiods , Ġmust Ġbe Ġthousands ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comma Based Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( c 2 Ġ!= Ġ- 1 Ġ&& Ġ( len No Sign Ġ> Ġ 7 Ġ|| Ġlen No Sign Ġ< Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthere Ġis Ġa Ġcomma , Ġbut Ġit Ġcould Ġnot Ġbe Ġthousands Ġas Ġthere Ġshould Ġbe Ġmore Ġthan Ġone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comma Based Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( p 2 Ġ!= Ġ- 1 Ġ&& Ġ( len No Sign Ġ> Ġ 7 Ġ|| Ġlen No Sign Ġ< Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthere Ġis Ġa Ġperiod , Ġbut Ġit Ġcould Ġnot Ġbe Ġthousands Ġas Ġthere Ġshould Ġbe Ġmore Ġthan Ġone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comma Based Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( c 1 Ġ!= Ġ- 1 Ġ&& Ġc 2 Ġ!= Ġs val . length Ġ- Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcomma Ġnot Ġin Ġthousands Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comma Based Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( p 1 Ġ!= Ġ- 1 Ġ&& Ġp 2 Ġ!= Ġs val . length Ġ- Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperiod Ġnot Ġin Ġthousands Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comma Based Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthere 's Ġa Ġperiod Ġin Ġthe Ġthousands Ġposition Ġ-> Ġguess Ġthat Ġthe Ġnumber Ġis Ġcomma Ġbased Ġwith Ġthousands Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comma Based Ġ= Ġallow Th ous ands Ġ&& Ġp 1 Ġ!= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġis Comma Based ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠCOM MA _ BASE D _ LOCAL E : ĠLocale Ġ= ĠLocale . for Language Tag (" es ") ĊĠĠĠ Ġprivate Ġval ĠPER IOD _ BASE D _ LOCAL E : ĠLocale Ġ= ĠLocale . for Language Tag (" en ") ĊĊĠĠĠ Ġfun Ġoptionally Convert StringTo Number ( value : ĠAny ?, Ġlocale : ĠLocale ? Ġ= Ġnull ): ĠAny ? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs val Ġ= Ġ( value Ġas ? ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace (' e ', Ġ' E ') Ġ// ĠNumber Formatter 's Ġexponent Ġis Ġcase Ġsensitive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace (" E +", Ġ" E ") Ġ// ĠNumber Formatter 's Ġexponent Ġis Ġneutral Ġor Ġnegative ĊĠĠĠĠĠĠĠ Ġif Ġ( s val Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġformatter : ĠNumber Format ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( locale Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatter Ġ= ĠNumber Format . getNumber Instance ( locale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . is Grouping Used Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatter Ġ= ĠNumber Format . getNumber Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( guess Number Comma ( value Ġ= Ġs val , Ġallow Th ous ands Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOM MA _ BASE D _ LOCAL E Ġelse ĠPER IOD _ BASE D _ LOCAL E ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnumber Ġ= Ġformatter . parse ( s val ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnumber . toDouble () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( locale Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatter Ġ= ĠNumber Format . getNumber Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( guess Number Comma ( value Ġ= Ġs val , Ġallow Th ous ands Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOM MA _ BASE D _ LOCAL E Ġelse ĠPER IOD _ BASE D _ LOCAL E ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġformatter . parse ( s val ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnumber . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ