/* Ċ ĠCopyright Ġ 2 0 2 0 ĠSpl endo ĠConsult ing ĠB . V . ĠThe ĠNe therlands ĊĊĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); ĊĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĊĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĊĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware ĊĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĊĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĊĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand ĊĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . ĊĊ Ġ*/ Ċ Ċ package Ġcom . spl endo . kal uga . base . text Ċ Ċ import Ġcom . spl endo . kal uga . base . utils . Locale Ċ import Ġplatform . Foundation . NS Number Ċ import Ġplatform . Foundation . NS Number Formatter Ċ import Ġplatform . Foundation . NS Number Formatter Currency Style Ċ import Ġplatform . Foundation . NS Number Formatter Decimal Style Ċ import Ġplatform . Foundation . NS Number Formatter Percent Style Ċ import Ġplatform . Foundation . NS Number Formatter Round Ce iling Ċ import Ġplatform . Foundation . NS Number Formatter Round Down Ċ import Ġplatform . Foundation . NS Number Formatter Round Floor Ċ import Ġplatform . Foundation . NS Number Formatter Round Half Down Ċ import Ġplatform . Foundation . NS Number Formatter Round Half Even Ċ import Ġplatform . Foundation . NS Number Formatter Round Up Ċ import Ġplatform . Foundation . NS Number Formatter Sc ientific Style Ċ import Ġplatform . Foundation . number With Int Ċ import Ġplatform . darwin . NS U Integer Ċ Ċ actual Ġclass ĠNumber Formatter Ġactual Ġconstructor ( actual Ġval Ġlocale : ĠLocale , Ġstyle : ĠNumber Format Style ) Ġ{ ĊĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġprivate Ġval Ġformatter Ġ= ĠNS Number Formatter (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġlocale Ġ= Ġthis @ Number Formatter . locale . ns Locale ĊĠĠĠĠĠĠĠ Ġwhen Ġ( style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Format Style . Integer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Style Ġ= ĠNS Number Formatter Decimal Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Integer Digits Ġ= Ġstyle . min Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Integer Digits Ġ= Ġstyle . max Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Fraction Digits Ġ= Ġ 0 . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Fraction Digits Ġ= Ġ 0 . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Format Style . Decimal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Style Ġ= ĠNS Number Formatter Decimal Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Integer Digits Ġ= Ġstyle . min Integer Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Integer Digits Ġ= Ġstyle . max Integer Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Fraction Digits Ġ= Ġstyle . min Fraction Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Fraction Digits Ġ= Ġstyle . max Fraction Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Format Style . Percentage Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Style Ġ= ĠNS Number Formatter Percent Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Integer Digits Ġ= Ġstyle . min Integer Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Integer Digits Ġ= Ġstyle . max Integer Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Fraction Digits Ġ= Ġstyle . min Fraction Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Fraction Digits Ġ= Ġstyle . max Fraction Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Format Style . Perm illage Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Style Ġ= ĠNS Number Formatter Percent Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Format Ġ= Ġpositive Format . replace ('% ', Ġ' âĢ ° ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Format Ġ= Ġnegative Format . replace ('% ', Ġ' âĢ ° ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Integer Digits Ġ= Ġstyle . min Integer Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Integer Digits Ġ= Ġstyle . max Integer Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Fraction Digits Ġ= Ġstyle . min Fraction Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Fraction Digits Ġ= Ġstyle . max Fraction Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Format Style . Sc ientific Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Style Ġ= ĠNS Number Formatter Sc ientific Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Format Ġ= Ġstyle . pattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Format Ġ= Ġ"- ${ style . pattern }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Format Style . Currency Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Style Ġ= ĠNS Number Formatter Currency Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . currency Code ?. let Ġ{ Ġcurrency Code Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . currency Code Ġ= Ġcurrency Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Integer Digits Ġ= Ġstyle . min Integer Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Integer Digits Ġ= Ġstyle . max Integer Digits . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . min Fraction Digits ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Fraction Digits Ġ= Ġit . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . max Fraction Digits ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Fraction Digits Ġ= Ġit . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Format Style . Pattern Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Style Ġ= ĠNS Number Formatter Decimal Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Format Ġ= Ġstyle . positive Pattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Format Ġ= Ġstyle . negative Pattern ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġuses Sign ificant Digits Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrounding Mode Ġ= Ġwhen Ġ( style . rounding Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRound ingMode . Ce iling Ġ-> ĠNS Number Formatter Round Ce iling ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRound ingMode . Floor Ġ-> ĠNS Number Formatter Round Floor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRound ingMode . Half Even Ġ-> ĠNS Number Formatter Round Half Even ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRound ingMode . Half Up Ġ-> ĠNS Number Formatter Round Floor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRound ingMode . Half Down Ġ-> ĠNS Number Formatter Round Half Down ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRound ingMode . Down Ġ-> ĠNS Number Formatter Round Down ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRound ingMode . Up Ġ-> ĠNS Number Formatter Round Up ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġvar Ġpercent Symbol : ĠChar ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . percent Symbol . get OrNull ( 0 ) Ġ?: ĠChar . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . percent Symbol Ġ= Ġchar ArrayOf ( value ). concat ToString () Ġ} ĊĠĠĠ Ġactual Ġvar Ġper M ill Symbol : ĠChar ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . per M ill Symbol . get OrNull ( 0 ) Ġ?: ĠChar . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . per M ill Symbol Ġ= Ġchar ArrayOf ( value ). concat ToString () Ġ} ĊĠĠĠ Ġactual Ġvar Ġminus Sign : ĠChar ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . minus Sign . get OrNull ( 0 ) Ġ?: ĠChar . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . minus Sign Ġ= Ġchar ArrayOf ( value ). concat ToString () Ġ} ĊĠĠĠ Ġactual Ġvar Ġexponent Symbol : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . exponent Symbol ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . exponent Symbol Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġzero Symbol : ĠChar ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . zero Symbol ?. get OrNull ( 0 ) Ġ?: Ġ' 0 ' ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . zero Symbol Ġ= Ġchar ArrayOf ( value ). concat ToString () Ġ} ĊĠĠĠ Ġactual Ġvar Ġnot AN umber Symbol : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . not AN umber Symbol ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . not AN umber Symbol Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġinfinity Symbol : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . positive Infinity Symbol ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . positive Infinity Symbol Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . negative Infinity Symbol Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġactual Ġvar Ġcurrency Symbol : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . currency Symbol ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . currency Symbol Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġcurrency Code : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . currency Code ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . currency Code Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġpositive Prefix : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . positive Prefix ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . positive Prefix Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġpositive Suffix : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . positive Suffix ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . positive Suffix Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġnegative Prefix : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . negative Prefix ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . negative Prefix Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġnegative Suffix : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . negative Suffix ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . negative Suffix Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġgrouping Separator : ĠChar ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . grouping Separator . get OrNull ( 0 ) Ġ?: ĠChar . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Value Ġ= Ġchar ArrayOf ( value ). concat ToString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . grouping Separator Ġ= Ġchar Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . currency Grouping Separator Ġ= Ġchar Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġactual Ġvar Ġuses Grouping Separator : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . uses Grouping Separator ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . uses Grouping Separator Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġdecimal Separator : ĠChar ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . decimal Separator . get OrNull ( 0 ) Ġ?: ĠChar . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . decimal Separator Ġ= Ġchar ArrayOf ( value ). concat ToString () Ġ} ĊĠĠĠ Ġactual Ġvar Ġalways Shows Decimal Separator : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . always Shows Decimal Separator ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . always Shows Decimal Separator Ġ= Ġvalue Ġ} ĊĠĠĠ Ġactual Ġvar Ġcurrency Decimal Separator : ĠChar ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . currency Decimal Separator . get OrNull ( 0 ) Ġ?: ĠChar . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . currency Decimal Separator Ġ= Ġchar ArrayOf ( value ). concat ToString () Ġ} ĊĠĠĠ Ġactual Ġvar Ġgrouping Size : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . grouping Size . toInt () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . grouping Size Ġ= Ġvalue . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . secondary Grouping Size Ġ= Ġvalue . to UL ong () Ġas ĠN SU Integer ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġactual Ġvar Ġmultiplier : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformatter . multiplier ?. intValue Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġformatter . multiplier Ġ= ĠNS Number . number With Int ( value ) Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġformat ( number : ĠNumber ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( formatter . string From Number ( number Ġas ĠNS Number ) Ġ?: Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġparse ( string : ĠString ): ĠNumber ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġformatter . number FromString ( string ) Ġas ? ĠNumber ĊĠĠĠ Ġ} Ċ } Ċ