/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġkotlin . time Ċ Ċ import Ġjava . math . Round ingMode Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . Decimal Format Symbols Ċ import Ġjava . util .* Ċ import Ġkotlin . concurrent . get Or Set Ċ Ċ private Ġval Ġroot Negative Exp Format Symbols Ġ= ĠDecimal Format Symbols ( Locale . ROOT ). apply Ġ{ Ġexponent Separator Ġ= Ġ" e " Ġ} Ċ private Ġval Ġroot Positive Exp Format Symbols Ġ= ĠDecimal Format Symbols ( Locale . ROOT ). apply Ġ{ Ġexponent Separator Ġ= Ġ" e +" Ġ} Ċ private Ġval Ġprecision Formats Ġ= ĠArray ( 4 ) Ġ{ ĠThread Local < Decimal Format >() Ġ} Ċ Ċ private Ġfun Ġcreate Format For Decimal s ( decimals : ĠInt ) Ġ= ĠDecimal Format (" 0 ", Ġroot Negative Exp Format Symbols ). apply Ġ{ ĊĠĠĠ Ġif Ġ( decimals Ġ> Ġ 0 ) Ġminimum Fraction Digits Ġ= Ġdecimals ĊĠĠĠ Ġrounding Mode Ġ= ĠRound ingMode . HALF _ UP Ċ } Ċ Ċ internal Ġactual Ġfun Ġformat To Exact Decimal s ( value : ĠDouble , Ġdecimals : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġformat Ġ= Ġif Ġ( decimals Ġ< Ġprecision Formats . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprecision Formats [ decimals ]. get Or Set Ġ{ Ġcreate Format For Decimal s ( decimals ) Ġ} ĊĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠ Ġcreate Format For Decimal s ( decimals ) ĊĠĠĠ Ġreturn Ġformat . format ( value ) Ċ } Ċ Ċ internal Ġactual Ġfun Ġformat Up To Decimal s ( value : ĠDouble , Ġdecimals : ĠInt ): ĠString Ġ= ĊĠĠĠ Ġcreate Format For Decimal s ( 0 ) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġmaximum Fraction Digits Ġ= Ġdecimals Ġ} ĊĠĠĠĠĠĠĠ Ġ. format ( value ) Ċ Ċ private Ġval Ġscientific Format Ġ= ĠThread Local < Decimal Format >() Ċ internal Ġactual Ġfun Ġformat Sc ientific ( value : ĠDouble ): ĠString Ġ= ĊĠĠĠ Ġscientific Format . get Or Set Ġ{ ĠDecimal Format (" 0 E 0 ", Ġroot Negative Exp Format Symbols ). apply Ġ{ Ġminimum Fraction Digits Ġ= Ġ 2 Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecimal Format Symbols Ġ= Ġif Ġ( value Ġ>= Ġ 1 Ġ|| Ġvalue Ġ<= Ġ- 1 ) Ġroot Positive Exp Format Symbols Ġelse Ġroot Negative Exp Format Symbols ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. format ( value )