diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_currency_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_currency_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,254 @@ + +
+00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). +00002 // All rights reserved. +00003 // This component and the accompanying materials are made available +00004 // under the terms of "Eclipse Public License v1.0" +00005 // which accompanies this distribution, and is available +00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". +00007 // +00008 // Initial Contributors: +00009 // Nokia Corporation - initial contribution. +00010 // +00011 // Contributors: +00012 // +00013 // Description: +00014 // +00015 +00016 #include "CommonFramework.h" // standard example framework +00017 +00018 // advance declarations +00019 void printCurrency(); +00020 void formatCurrency(TDes &aBuffer, TReal currencyAmount); +00021 +00022 +00023 LOCAL_C void doExampleL() +00024 { +00025 // construct and initialize application data +00026 // Locale information includes whether there is a space between +00027 // currency symbol and amount, whether negative currency amounts +00028 // are enclosed in brackets, and whether digits to left of decimal +00029 // separator are grouped in threes ("Triads"). +00030 TLocale locale; // locale information +00031 TCurrencySymbol currencySymbol; +00032 currencySymbol.Set(); // Get system wide currency symbol setting +00033 locale.SetCurrencySymbolPosition(ELocaleBefore); +00034 locale.SetCurrencySpaceBetween(EFalse); +00035 locale.SetNegativeCurrencyFormat(TLocale::ELeadingMinusSign); +00036 locale.SetCurrencyDecimalPlaces(2); +00037 locale.SetCurrencyTriadsAllowed(ETrue); +00038 locale.SetThousandsSeparator(','); +00039 locale.SetDecimalSeparator('.'); +00040 locale.Set(); // set system default settings +00041 printCurrency(); +00042 } +00043 +00044 void printCurrency() +00045 { +00046 TBuf<30> aBuffer; // receives formatted currency string +00047 aBuffer.Zero(); // empty buffer +00048 TReal currencyAmount=-12345678.119; +00049 formatCurrency(aBuffer, currencyAmount); +00050 _LIT(KFormat1,"Currency value is: %S\n"); +00051 console->Printf(KFormat1,&aBuffer); +00052 } +00053 +00054 void formatCurrency(TDes &aBuffer, TReal currencyAmount) +00055 { +00056 // +00057 // Format the currency starting with the currency symbol +00058 // +00059 TLocale locale; // System locale settings +00060 TRealFormat realFormat; +00061 // +00062 // Set up a TRealFormat object from locale information. +00063 // This involves setting decimal and thousands separators, +00064 // whether triads are allowed or not and number of decimal places. +00065 // +00066 realFormat.iType=KRealFormatFixed; // converts number to the form +00067 //"nnn.ddd" (n=integer, d=decimal) +00068 realFormat.iWidth=30; // Max. number of characters allowed +00069 // to represent the number +00070 realFormat.iPlaces=locale.CurrencyDecimalPlaces(); +00071 realFormat.iPoint=locale.DecimalSeparator(); +00072 realFormat.iTriad=locale.ThousandsSeparator(); +00073 realFormat.iTriLen=(locale.CurrencyTriadsAllowed() ? 1 : 0); +00074 TCurrencySymbol symbol; // get currency symbol from +00075 // system setting +00076 +00077 _LIT(KTxtOpenBra,"("); +00078 _LIT(KTxtSpace," "); +00079 _LIT(KTxtCloseBra,")"); +00080 _LIT(KTxtMinusSign,"-"); +00081 // Negative currency amounts may +00082 // be enclosed in brackets. +00083 // Currency symbol can appear before or +00084 // after the value. +00085 // We can have spaces between the currency +00086 // symbol and the value. +00087 +00088 +00089 TUint currencySymbolAtFront; +00090 TUint spaceBetweenSymbolAndValue; +00091 +00092 // +00093 // setup some useful values. +00094 // +00095 currencySymbolAtFront = ((locale.CurrencySymbolPosition()==ELocaleBefore) ? 0x01 : 0x00); +00096 spaceBetweenSymbolAndValue = (locale.CurrencySpaceBetween() ? 0x01 : 0x00); +00097 +00098 // +00099 // Deal with negative values +00100 // +00101 if (currencyAmount<0) +00102 { +00103 // Check if position of currency symbol needs to swap for +00104 // for negavtive values +00105 currencySymbolAtFront ^= (locale.NegativeCurrencySymbolOpposite() ? 0x01 : 0x00); +00106 +00107 // Check if we need a space between currency symbol +00108 // and value. +00109 if (spaceBetweenSymbolAndValue && locale.NegativeLoseSpace()) +00110 { +00111 spaceBetweenSymbolAndValue = 0x00; +00112 } +00113 +00114 // Now lay out the negative value as instructed. +00115 switch (locale.NegativeCurrencyFormat()) +00116 { +00117 case TLocale::ELeadingMinusSign : +00118 { +00119 aBuffer.Append(KTxtMinusSign); +00120 if (currencySymbolAtFront) +00121 { +00122 aBuffer.Append(symbol); +00123 if (spaceBetweenSymbolAndValue) +00124 { +00125 aBuffer.Append(KTxtSpace); +00126 } +00127 aBuffer.AppendNum(-currencyAmount,realFormat); +00128 } +00129 else +00130 { +00131 aBuffer.AppendNum(-currencyAmount,realFormat); +00132 if (spaceBetweenSymbolAndValue) +00133 { +00134 aBuffer.Append(KTxtSpace); +00135 } +00136 aBuffer.Append(symbol); +00137 } +00138 break; +00139 } +00140 +00141 case TLocale::ETrailingMinusSign : +00142 { +00143 if (currencySymbolAtFront) +00144 { +00145 aBuffer.Append(symbol); +00146 if (spaceBetweenSymbolAndValue) +00147 { +00148 aBuffer.Append(KTxtSpace); +00149 } +00150 aBuffer.AppendNum(-currencyAmount,realFormat); +00151 aBuffer.Append(KTxtMinusSign); +00152 } +00153 else +00154 { +00155 aBuffer.AppendNum(-currencyAmount,realFormat); +00156 aBuffer.Append(KTxtMinusSign); +00157 if (spaceBetweenSymbolAndValue) +00158 { +00159 aBuffer.Append(KTxtSpace); +00160 } +00161 aBuffer.Append(symbol); +00162 } +00163 break; +00164 } +00165 +00166 case TLocale::EInterveningMinusSign : +00167 { +00168 if (currencySymbolAtFront) +00169 { +00170 aBuffer.Append(symbol); +00171 if (spaceBetweenSymbolAndValue) +00172 { +00173 aBuffer.Append(KTxtSpace); +00174 } +00175 aBuffer.AppendNum(currencyAmount,realFormat); +00176 } +00177 else +00178 { +00179 aBuffer.AppendNum(currencyAmount,realFormat); +00180 if (spaceBetweenSymbolAndValue) +00181 { +00182 aBuffer.Append(KTxtSpace); +00183 } +00184 aBuffer.Append(symbol); +00185 } +00186 break; +00187 } +00188 +00189 default : // EInBrackets is the only remaining option +00190 { +00191 aBuffer.Append(KTxtOpenBra); +00192 if (currencySymbolAtFront) +00193 { +00194 aBuffer.Append(symbol); +00195 if (spaceBetweenSymbolAndValue) +00196 { +00197 aBuffer.Append(KTxtSpace); +00198 } +00199 aBuffer.AppendNum(-currencyAmount,realFormat); +00200 } +00201 else +00202 { +00203 aBuffer.AppendNum(-currencyAmount,realFormat); +00204 if (spaceBetweenSymbolAndValue) +00205 { +00206 aBuffer.Append(KTxtSpace); +00207 } +00208 aBuffer.Append(symbol); +00209 } +00210 aBuffer.Append(KTxtCloseBra); +00211 break; +00212 } +00213 +00214 } +00215 } +00216 +00217 // +00218 // Deal with zero or postive values +00219 // +00220 else +00221 { +00222 if (currencySymbolAtFront) +00223 { +00224 aBuffer.Append(symbol); +00225 if (spaceBetweenSymbolAndValue) +00226 { +00227 aBuffer.Append(KTxtSpace); +00228 } +00229 aBuffer.AppendNum(currencyAmount,realFormat); +00230 } +00231 else +00232 { +00233 aBuffer.AppendNum(currencyAmount,realFormat); +00234 if (spaceBetweenSymbolAndValue) +00235 { +00236 aBuffer.Append(KTxtSpace); +00237 } +00238 aBuffer.Append(symbol); +00239 } +00240 } +00241 +00242 } +