<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=330514&amp;view=findpost&amp;p=2878034</guid>
        <pubDate>Mon, 18 Apr 2011 11:54:29 +0000</pubDate>
        <title>Денежный тип</title>
        <link>https://forum.sources.ru/index.php?showtopic=330514&amp;view=findpost&amp;p=2878034</link>
        <description><![CDATA[Romkin: <div class='tag-align-center'><span class='tag-size' data-value='14' style='font-size:14pt;'><span class="tag-color tag-color-named" data-value="purple" style="color: purple">Тип TMoney </span></span></div><br>
Лично мне его очень не хватало лет десять назад, простого типа данных, который обеспечивает контроль над операциями с валютой. <br>
Просто Double или currency не слишком подходят, достаточно велика вероятность что сложат доллары с фунтами или еще что-нибудь. <br>
Предлагается, по моему мнению, простейшая реализация типа TMoney, на основе Currency. Задачей было обеспечить контроль типа валюты.<br>
Надо заметить, что деньги легко складывать и вычитать (в одной валюте), а вот умножать и делить их друг на друга нельзя, поэтому вместо умножения двух TMoney сделан метод умножения на коэффициент.<br>
Вот что получилось, сначала описание типа &quot;валюта&quot;.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit CurrencyList;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;Модуль списка валют</div><div class="code_line">}</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TCurrName = String[3];</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;TCurrency = record</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;FName: TCurrName;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;property Name: TCurrName read FName;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">// Список значений валют по ISO 4217</div><div class="code_line">// Имя кнстанты соответствует имени валюты с приставкой &#39;c&#39;</div><div class="code_line">const</div><div class="code_line">{$REGION &#39;Длинный список констант валют&#39;}</div><div class="code_line">&nbsp;&nbsp;cAFN: TCurrency = (FName: &#39;AFN&#39;);</div><div class="code_line">&nbsp;&nbsp;cALL: TCurrency = (FName: &#39;ALL&#39;);</div><div class="code_line">&nbsp;&nbsp;cAMD: TCurrency = (FName: &#39;AMD&#39;);</div><div class="code_line">&nbsp;&nbsp;cANG: TCurrency = (FName: &#39;ANG&#39;);</div><div class="code_line">&nbsp;&nbsp;cAOA: TCurrency = (FName: &#39;AOA&#39;);</div><div class="code_line">&nbsp;&nbsp;cARS: TCurrency = (FName: &#39;ARS&#39;);</div><div class="code_line">&nbsp;&nbsp;cAUD: TCurrency = (FName: &#39;AUD&#39;);</div><div class="code_line">&nbsp;&nbsp;cAWG: TCurrency = (FName: &#39;AWG&#39;);</div><div class="code_line">&nbsp;&nbsp;cAZN: TCurrency = (FName: &#39;AZN&#39;);</div><div class="code_line">&nbsp;&nbsp;cBAM: TCurrency = (FName: &#39;BAM&#39;);</div><div class="code_line">&nbsp;&nbsp;cBBD: TCurrency = (FName: &#39;BBD&#39;);</div><div class="code_line">&nbsp;&nbsp;cBDT: TCurrency = (FName: &#39;BDT&#39;);</div><div class="code_line">&nbsp;&nbsp;cBGN: TCurrency = (FName: &#39;BGN&#39;);</div><div class="code_line">&nbsp;&nbsp;cBHD: TCurrency = (FName: &#39;BHD&#39;);</div><div class="code_line">&nbsp;&nbsp;cBIF: TCurrency = (FName: &#39;BIF&#39;);</div><div class="code_line">&nbsp;&nbsp;cBMD: TCurrency = (FName: &#39;BMD&#39;);</div><div class="code_line">&nbsp;&nbsp;cBND: TCurrency = (FName: &#39;BND&#39;);</div><div class="code_line">&nbsp;&nbsp;cBOB: TCurrency = (FName: &#39;BOB&#39;);</div><div class="code_line">&nbsp;&nbsp;cBOV: TCurrency = (FName: &#39;BOV&#39;);</div><div class="code_line">&nbsp;&nbsp;cBRL: TCurrency = (FName: &#39;BRL&#39;);</div><div class="code_line">&nbsp;&nbsp;cBSD: TCurrency = (FName: &#39;BSD&#39;);</div><div class="code_line">&nbsp;&nbsp;cBTN: TCurrency = (FName: &#39;BTN&#39;);</div><div class="code_line">&nbsp;&nbsp;cBWP: TCurrency = (FName: &#39;BWP&#39;);</div><div class="code_line">&nbsp;&nbsp;cBYR: TCurrency = (FName: &#39;BYR&#39;);</div><div class="code_line">&nbsp;&nbsp;cBZD: TCurrency = (FName: &#39;BZD&#39;);</div><div class="code_line">&nbsp;&nbsp;cCAD: TCurrency = (FName: &#39;CAD&#39;);</div><div class="code_line">&nbsp;&nbsp;cCDF: TCurrency = (FName: &#39;CDF&#39;);</div><div class="code_line">&nbsp;&nbsp;cCHE: TCurrency = (FName: &#39;CHE&#39;);</div><div class="code_line">&nbsp;&nbsp;cCHF: TCurrency = (FName: &#39;CHF&#39;);</div><div class="code_line">&nbsp;&nbsp;cCHW: TCurrency = (FName: &#39;CHW&#39;);</div><div class="code_line">&nbsp;&nbsp;cCLF: TCurrency = (FName: &#39;CLF&#39;);</div><div class="code_line">&nbsp;&nbsp;cCLP: TCurrency = (FName: &#39;CLP&#39;);</div><div class="code_line">&nbsp;&nbsp;cCNY: TCurrency = (FName: &#39;CNY&#39;);</div><div class="code_line">&nbsp;&nbsp;cCOP: TCurrency = (FName: &#39;COP&#39;);</div><div class="code_line">&nbsp;&nbsp;cCOU: TCurrency = (FName: &#39;COU&#39;);</div><div class="code_line">&nbsp;&nbsp;cCRC: TCurrency = (FName: &#39;CRC&#39;);</div><div class="code_line">&nbsp;&nbsp;cCUC: TCurrency = (FName: &#39;CUC&#39;);</div><div class="code_line">&nbsp;&nbsp;cCUP: TCurrency = (FName: &#39;CUP&#39;);</div><div class="code_line">&nbsp;&nbsp;cCVE: TCurrency = (FName: &#39;CVE&#39;);</div><div class="code_line">&nbsp;&nbsp;cCZK: TCurrency = (FName: &#39;CZK&#39;);</div><div class="code_line">&nbsp;&nbsp;cDJF: TCurrency = (FName: &#39;DJF&#39;);</div><div class="code_line">&nbsp;&nbsp;cDKK: TCurrency = (FName: &#39;DKK&#39;);</div><div class="code_line">&nbsp;&nbsp;cDOP: TCurrency = (FName: &#39;DOP&#39;);</div><div class="code_line">&nbsp;&nbsp;cDZD: TCurrency = (FName: &#39;DZD&#39;);</div><div class="code_line">&nbsp;&nbsp;cEGP: TCurrency = (FName: &#39;EGP&#39;);</div><div class="code_line">&nbsp;&nbsp;cERN: TCurrency = (FName: &#39;ERN&#39;);</div><div class="code_line">&nbsp;&nbsp;cETB: TCurrency = (FName: &#39;ETB&#39;);</div><div class="code_line">&nbsp;&nbsp;cEUR: TCurrency = (FName: &#39;EUR&#39;);</div><div class="code_line">&nbsp;&nbsp;cFJD: TCurrency = (FName: &#39;FJD&#39;);</div><div class="code_line">&nbsp;&nbsp;cFKP: TCurrency = (FName: &#39;FKP&#39;);</div><div class="code_line">&nbsp;&nbsp;cGBP: TCurrency = (FName: &#39;GBP&#39;);</div><div class="code_line">&nbsp;&nbsp;cGEL: TCurrency = (FName: &#39;GEL&#39;);</div><div class="code_line">&nbsp;&nbsp;cGHS: TCurrency = (FName: &#39;GHS&#39;);</div><div class="code_line">&nbsp;&nbsp;cGIP: TCurrency = (FName: &#39;GIP&#39;);</div><div class="code_line">&nbsp;&nbsp;cGMD: TCurrency = (FName: &#39;GMD&#39;);</div><div class="code_line">&nbsp;&nbsp;cGNF: TCurrency = (FName: &#39;GNF&#39;);</div><div class="code_line">&nbsp;&nbsp;cGTQ: TCurrency = (FName: &#39;GTQ&#39;);</div><div class="code_line">&nbsp;&nbsp;cGYD: TCurrency = (FName: &#39;GYD&#39;);</div><div class="code_line">&nbsp;&nbsp;cHKD: TCurrency = (FName: &#39;HKD&#39;);</div><div class="code_line">&nbsp;&nbsp;cHNL: TCurrency = (FName: &#39;HNL&#39;);</div><div class="code_line">&nbsp;&nbsp;cHRK: TCurrency = (FName: &#39;HRK&#39;);</div><div class="code_line">&nbsp;&nbsp;cHTG: TCurrency = (FName: &#39;HTG&#39;);</div><div class="code_line">&nbsp;&nbsp;cHUF: TCurrency = (FName: &#39;HUF&#39;);</div><div class="code_line">&nbsp;&nbsp;cIDR: TCurrency = (FName: &#39;IDR&#39;);</div><div class="code_line">&nbsp;&nbsp;cILS: TCurrency = (FName: &#39;ILS&#39;);</div><div class="code_line">&nbsp;&nbsp;cINR: TCurrency = (FName: &#39;INR&#39;);</div><div class="code_line">&nbsp;&nbsp;cIQD: TCurrency = (FName: &#39;IQD&#39;);</div><div class="code_line">&nbsp;&nbsp;cIRR: TCurrency = (FName: &#39;IRR&#39;);</div><div class="code_line">&nbsp;&nbsp;cISK: TCurrency = (FName: &#39;ISK&#39;);</div><div class="code_line">&nbsp;&nbsp;cJMD: TCurrency = (FName: &#39;JMD&#39;);</div><div class="code_line">&nbsp;&nbsp;cJOD: TCurrency = (FName: &#39;JOD&#39;);</div><div class="code_line">&nbsp;&nbsp;cJPY: TCurrency = (FName: &#39;JPY&#39;);</div><div class="code_line">&nbsp;&nbsp;cKES: TCurrency = (FName: &#39;KES&#39;);</div><div class="code_line">&nbsp;&nbsp;cKGS: TCurrency = (FName: &#39;KGS&#39;);</div><div class="code_line">&nbsp;&nbsp;cKHR: TCurrency = (FName: &#39;KHR&#39;);</div><div class="code_line">&nbsp;&nbsp;cKMF: TCurrency = (FName: &#39;KMF&#39;);</div><div class="code_line">&nbsp;&nbsp;cKPW: TCurrency = (FName: &#39;KPW&#39;);</div><div class="code_line">&nbsp;&nbsp;cKRW: TCurrency = (FName: &#39;KRW&#39;);</div><div class="code_line">&nbsp;&nbsp;cKWD: TCurrency = (FName: &#39;KWD&#39;);</div><div class="code_line">&nbsp;&nbsp;cKYD: TCurrency = (FName: &#39;KYD&#39;);</div><div class="code_line">&nbsp;&nbsp;cKZT: TCurrency = (FName: &#39;KZT&#39;);</div><div class="code_line">&nbsp;&nbsp;cLAK: TCurrency = (FName: &#39;LAK&#39;);</div><div class="code_line">&nbsp;&nbsp;cLBP: TCurrency = (FName: &#39;LBP&#39;);</div><div class="code_line">&nbsp;&nbsp;cLKR: TCurrency = (FName: &#39;LKR&#39;);</div><div class="code_line">&nbsp;&nbsp;cLRD: TCurrency = (FName: &#39;LRD&#39;);</div><div class="code_line">&nbsp;&nbsp;cLSL: TCurrency = (FName: &#39;LSL&#39;);</div><div class="code_line">&nbsp;&nbsp;cLTL: TCurrency = (FName: &#39;LTL&#39;);</div><div class="code_line">&nbsp;&nbsp;cLVL: TCurrency = (FName: &#39;LVL&#39;);</div><div class="code_line">&nbsp;&nbsp;cLYD: TCurrency = (FName: &#39;LYD&#39;);</div><div class="code_line">&nbsp;&nbsp;cMAD: TCurrency = (FName: &#39;MAD&#39;);</div><div class="code_line">&nbsp;&nbsp;cMDL: TCurrency = (FName: &#39;MDL&#39;);</div><div class="code_line">&nbsp;&nbsp;cMGA: TCurrency = (FName: &#39;MGA&#39;);</div><div class="code_line">&nbsp;&nbsp;cMKD: TCurrency = (FName: &#39;MKD&#39;);</div><div class="code_line">&nbsp;&nbsp;cMMK: TCurrency = (FName: &#39;MMK&#39;);</div><div class="code_line">&nbsp;&nbsp;cMNT: TCurrency = (FName: &#39;MNT&#39;);</div><div class="code_line">&nbsp;&nbsp;cMOP: TCurrency = (FName: &#39;MOP&#39;);</div><div class="code_line">&nbsp;&nbsp;cMRO: TCurrency = (FName: &#39;MRO&#39;);</div><div class="code_line">&nbsp;&nbsp;cMUR: TCurrency = (FName: &#39;MUR&#39;);</div><div class="code_line">&nbsp;&nbsp;cMVR: TCurrency = (FName: &#39;MVR&#39;);</div><div class="code_line">&nbsp;&nbsp;cMWK: TCurrency = (FName: &#39;MWK&#39;);</div><div class="code_line">&nbsp;&nbsp;cMXN: TCurrency = (FName: &#39;MXN&#39;);</div><div class="code_line">&nbsp;&nbsp;cMXV: TCurrency = (FName: &#39;MXV&#39;);</div><div class="code_line">&nbsp;&nbsp;cMYR: TCurrency = (FName: &#39;MYR&#39;);</div><div class="code_line">&nbsp;&nbsp;cMZN: TCurrency = (FName: &#39;MZN&#39;);</div><div class="code_line">&nbsp;&nbsp;cNAD: TCurrency = (FName: &#39;NAD&#39;);</div><div class="code_line">&nbsp;&nbsp;cNGN: TCurrency = (FName: &#39;NGN&#39;);</div><div class="code_line">&nbsp;&nbsp;cNIO: TCurrency = (FName: &#39;NIO&#39;);</div><div class="code_line">&nbsp;&nbsp;cNOK: TCurrency = (FName: &#39;NOK&#39;);</div><div class="code_line">&nbsp;&nbsp;cNPR: TCurrency = (FName: &#39;NPR&#39;);</div><div class="code_line">&nbsp;&nbsp;cNZD: TCurrency = (FName: &#39;NZD&#39;);</div><div class="code_line">&nbsp;&nbsp;cOMR: TCurrency = (FName: &#39;OMR&#39;);</div><div class="code_line">&nbsp;&nbsp;cPAB: TCurrency = (FName: &#39;PAB&#39;);</div><div class="code_line">&nbsp;&nbsp;cPEN: TCurrency = (FName: &#39;PEN&#39;);</div><div class="code_line">&nbsp;&nbsp;cPGK: TCurrency = (FName: &#39;PGK&#39;);</div><div class="code_line">&nbsp;&nbsp;cPHP: TCurrency = (FName: &#39;PHP&#39;);</div><div class="code_line">&nbsp;&nbsp;cPKR: TCurrency = (FName: &#39;PKR&#39;);</div><div class="code_line">&nbsp;&nbsp;cPLN: TCurrency = (FName: &#39;PLN&#39;);</div><div class="code_line">&nbsp;&nbsp;cPYG: TCurrency = (FName: &#39;PYG&#39;);</div><div class="code_line">&nbsp;&nbsp;cQAR: TCurrency = (FName: &#39;QAR&#39;);</div><div class="code_line">&nbsp;&nbsp;cRON: TCurrency = (FName: &#39;RON&#39;);</div><div class="code_line">&nbsp;&nbsp;cRSD: TCurrency = (FName: &#39;RSD&#39;);</div><div class="code_line">&nbsp;&nbsp;cRUB: TCurrency = (FName: &#39;RUB&#39;);</div><div class="code_line">&nbsp;&nbsp;cRWF: TCurrency = (FName: &#39;RWF&#39;);</div><div class="code_line">&nbsp;&nbsp;cSAR: TCurrency = (FName: &#39;SAR&#39;);</div><div class="code_line">&nbsp;&nbsp;cSBD: TCurrency = (FName: &#39;SBD&#39;);</div><div class="code_line">&nbsp;&nbsp;cSCR: TCurrency = (FName: &#39;SCR&#39;);</div><div class="code_line">&nbsp;&nbsp;cSDG: TCurrency = (FName: &#39;SDG&#39;);</div><div class="code_line">&nbsp;&nbsp;cSEK: TCurrency = (FName: &#39;SEK&#39;);</div><div class="code_line">&nbsp;&nbsp;cSGD: TCurrency = (FName: &#39;SGD&#39;);</div><div class="code_line">&nbsp;&nbsp;cSHP: TCurrency = (FName: &#39;SHP&#39;);</div><div class="code_line">&nbsp;&nbsp;cSLL: TCurrency = (FName: &#39;SLL&#39;);</div><div class="code_line">&nbsp;&nbsp;cSOS: TCurrency = (FName: &#39;SOS&#39;);</div><div class="code_line">&nbsp;&nbsp;cSRD: TCurrency = (FName: &#39;SRD&#39;);</div><div class="code_line">&nbsp;&nbsp;cSTD: TCurrency = (FName: &#39;STD&#39;);</div><div class="code_line">&nbsp;&nbsp;cSVC: TCurrency = (FName: &#39;SVC&#39;);</div><div class="code_line">&nbsp;&nbsp;cSYP: TCurrency = (FName: &#39;SYP&#39;);</div><div class="code_line">&nbsp;&nbsp;cSZL: TCurrency = (FName: &#39;SZL&#39;);</div><div class="code_line">&nbsp;&nbsp;cTHB: TCurrency = (FName: &#39;THB&#39;);</div><div class="code_line">&nbsp;&nbsp;cTJS: TCurrency = (FName: &#39;TJS&#39;);</div><div class="code_line">&nbsp;&nbsp;cTMT: TCurrency = (FName: &#39;TMT&#39;);</div><div class="code_line">&nbsp;&nbsp;cTND: TCurrency = (FName: &#39;TND&#39;);</div><div class="code_line">&nbsp;&nbsp;cTOP: TCurrency = (FName: &#39;TOP&#39;);</div><div class="code_line">&nbsp;&nbsp;cTRY: TCurrency = (FName: &#39;TRY&#39;);</div><div class="code_line">&nbsp;&nbsp;cTTD: TCurrency = (FName: &#39;TTD&#39;);</div><div class="code_line">&nbsp;&nbsp;cTWD: TCurrency = (FName: &#39;TWD&#39;);</div><div class="code_line">&nbsp;&nbsp;cTZS: TCurrency = (FName: &#39;TZS&#39;);</div><div class="code_line">&nbsp;&nbsp;cUAH: TCurrency = (FName: &#39;UAH&#39;);</div><div class="code_line">&nbsp;&nbsp;cUGX: TCurrency = (FName: &#39;UGX&#39;);</div><div class="code_line">&nbsp;&nbsp;cUSD: TCurrency = (FName: &#39;USD&#39;);</div><div class="code_line">&nbsp;&nbsp;cUSN: TCurrency = (FName: &#39;USN&#39;);</div><div class="code_line">&nbsp;&nbsp;cUSS: TCurrency = (FName: &#39;USS&#39;);</div><div class="code_line">&nbsp;&nbsp;cUYI: TCurrency = (FName: &#39;UYI&#39;);</div><div class="code_line">&nbsp;&nbsp;cUYU: TCurrency = (FName: &#39;UYU&#39;);</div><div class="code_line">&nbsp;&nbsp;cUZS: TCurrency = (FName: &#39;UZS&#39;);</div><div class="code_line">&nbsp;&nbsp;cVEF: TCurrency = (FName: &#39;VEF&#39;);</div><div class="code_line">&nbsp;&nbsp;cVND: TCurrency = (FName: &#39;VND&#39;);</div><div class="code_line">&nbsp;&nbsp;cVUV: TCurrency = (FName: &#39;VUV&#39;);</div><div class="code_line">&nbsp;&nbsp;cWST: TCurrency = (FName: &#39;WST&#39;);</div><div class="code_line">&nbsp;&nbsp;cXAF: TCurrency = (FName: &#39;XAF&#39;);</div><div class="code_line">&nbsp;&nbsp;cXAG: TCurrency = (FName: &#39;XAG&#39;);</div><div class="code_line">&nbsp;&nbsp;cXAU: TCurrency = (FName: &#39;XAU&#39;);</div><div class="code_line">&nbsp;&nbsp;cXBA: TCurrency = (FName: &#39;XBA&#39;);</div><div class="code_line">&nbsp;&nbsp;cXBB: TCurrency = (FName: &#39;XBB&#39;);</div><div class="code_line">&nbsp;&nbsp;cXBC: TCurrency = (FName: &#39;XBC&#39;);</div><div class="code_line">&nbsp;&nbsp;cXBD: TCurrency = (FName: &#39;XBD&#39;);</div><div class="code_line">&nbsp;&nbsp;cXCD: TCurrency = (FName: &#39;XCD&#39;);</div><div class="code_line">&nbsp;&nbsp;cXDR: TCurrency = (FName: &#39;XDR&#39;);</div><div class="code_line">&nbsp;&nbsp;cXFU: TCurrency = (FName: &#39;XFU&#39;);</div><div class="code_line">&nbsp;&nbsp;cXOF: TCurrency = (FName: &#39;XOF&#39;);</div><div class="code_line">&nbsp;&nbsp;cXPD: TCurrency = (FName: &#39;XPD&#39;);</div><div class="code_line">&nbsp;&nbsp;cXPF: TCurrency = (FName: &#39;XPF&#39;);</div><div class="code_line">&nbsp;&nbsp;cXPT: TCurrency = (FName: &#39;XPT&#39;);</div><div class="code_line">&nbsp;&nbsp;cXSU: TCurrency = (FName: &#39;XSU&#39;);</div><div class="code_line">&nbsp;&nbsp;cXTS: TCurrency = (FName: &#39;XTS&#39;);</div><div class="code_line">&nbsp;&nbsp;cXUA: TCurrency = (FName: &#39;XUA&#39;);</div><div class="code_line">&nbsp;&nbsp;cXXX: TCurrency = (FName: &#39;XXX&#39;);</div><div class="code_line">&nbsp;&nbsp;cYER: TCurrency = (FName: &#39;YER&#39;);</div><div class="code_line">&nbsp;&nbsp;cZAR: TCurrency = (FName: &#39;ZAR&#39;);</div><div class="code_line">&nbsp;&nbsp;cZMK: TCurrency = (FName: &#39;ZMK&#39;);</div><div class="code_line">&nbsp;&nbsp;cZWL: TCurrency = (FName: &#39;ZWL&#39;);</div><div class="code_line">{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Выглядит угрожающе, зато достаточно просто: стандарт меняется редко. Можно сделать и подгружаемый список, при желании. <br>
Странная запись из одного поля сделана просто для read-only значений.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">И не думайте, что я как обезьянка это набивал ;)</div></div><br>
<br>
Собственно TMoney:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Money;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;Описание типа &quot;деньги&quot;.</div><div class="code_line">&nbsp;&nbsp;Простой способ, запись вида (валюта, сумма).</div><div class="code_line">&nbsp;&nbsp;Роман Игнатьев, 2011</div><div class="code_line">}</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses SysUtils, CurrencyList;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;///&#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp;/// &nbsp;Тип &quot;деньги&quot;, для валютных сумм. Учет единиц измерения валюты.</div><div class="code_line">&nbsp;&nbsp;/// &nbsp;Переменная должна инициализироваться конструктором.</div><div class="code_line">&nbsp;&nbsp;///&#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp;TMoney = record</div><div class="code_line">&nbsp;&nbsp;strict private</div><div class="code_line">&nbsp;&nbsp; &nbsp;FCurrName: TCurrName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FValue: currency;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class procedure CheckCurrency(CurrName1, CurrName2: TCurrName); static;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inline;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;///&#60;summary&#62; Единственный способ инициализации &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;///&#60;param name=&quot;ACurrency&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// &nbsp;Инициализируется константой из CurrencyList</div><div class="code_line">&nbsp;&nbsp; &nbsp;///&#60;/param&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;///&#60;param name=&quot;AValue&quot;&#62;Начальное значение суммы&#60;/param&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(ACurrency: TCurrency; AValue: currency);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator Add(A, B: TMoney): TMoney;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator Subtract(A, B: TMoney): TMoney;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator Negative(A: TMoney): TMoney;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator Positive(A: TMoney): TMoney;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;///&#60;summary&#62; Умножение на безразмерный коэффициент &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator Multiply(L: Double; R: TMoney): TMoney;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator Multiply(L: TMoney; R: Double): TMoney;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator Equal(A, B: TMoney): boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator NotEqual(A, B: TMoney): boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator GreaterThan(A, B: TMoney): boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator GreaterThanOrEqual(A, B: TMoney): boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator LessThan(A, B: TMoney): boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class operator LessThanOrEqual(A, B: TMoney): boolean;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;property CurrName: TCurrName read FCurrName;</div><div class="code_line">&nbsp;&nbsp; &nbsp;property Value: currency read FValue;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;EMoneyError = class(EMathError);</div><div class="code_line">&nbsp;</div><div class="code_line">resourcestring</div><div class="code_line">&nbsp;&nbsp;strIncompatibleCurrency = &#39;Несовместимая валюта: %s и %s&#39;; &nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{ TMoney }</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TMoney.Create(ACurrency: TCurrency; AValue: currency);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;FCurrName := ACurrency.Name;</div><div class="code_line">&nbsp;&nbsp;FValue := AValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class procedure TMoney.CheckCurrency(CurrName1, CurrName2: TCurrName);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if CurrName1 &#60;&#62; CurrName2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise EMoneyError.CreateFmt(strIncompatibleCurrency,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;[CurrName1, CurrName2]);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.Add(A, B: TMoney): TMoney;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;CheckCurrency(A.FCurrName, B.FCurrName);</div><div class="code_line">&nbsp;&nbsp;Result.FCurrName := A.FCurrName;</div><div class="code_line">&nbsp;&nbsp;Result.FValue := A.FValue + B.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.Subtract(A, B: TMoney): TMoney;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;CheckCurrency(A.FCurrName, B.FCurrName);</div><div class="code_line">&nbsp;&nbsp;Result.FCurrName := A.FCurrName;</div><div class="code_line">&nbsp;&nbsp;Result.FValue := A.FValue - B.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.Negative(A: TMoney): TMoney;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result.FCurrName := A.FCurrName;</div><div class="code_line">&nbsp;&nbsp;Result.FValue := -A.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.Positive(A: TMoney): TMoney;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result.FCurrName := A.FCurrName;</div><div class="code_line">&nbsp;&nbsp;Result.FValue := A.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.Multiply(L: Double; R: TMoney): TMoney;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result := R;</div><div class="code_line">&nbsp;&nbsp;Result.FValue := Result.FValue * L;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.Multiply(L: TMoney; R: Double): TMoney;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result := L;</div><div class="code_line">&nbsp;&nbsp;Result.FValue := Result.FValue * R;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.Equal(A, B: TMoney): boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;CheckCurrency(A.FCurrName, B.FCurrName);</div><div class="code_line">&nbsp;&nbsp;Result := A.FValue = B.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.NotEqual(A, B: TMoney): boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;CheckCurrency(A.FCurrName, B.FCurrName);</div><div class="code_line">&nbsp;&nbsp;Result := A.FValue &#60;&#62; B.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.GreaterThan(A, B: TMoney): boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;CheckCurrency(A.FCurrName, B.FCurrName);</div><div class="code_line">&nbsp;&nbsp;Result := A.FValue &#62; B.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.GreaterThanOrEqual(A, B: TMoney): boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;CheckCurrency(A.FCurrName, B.FCurrName);</div><div class="code_line">&nbsp;&nbsp;Result := A.FValue &#62;= B.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.LessThan(A, B: TMoney): boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;CheckCurrency(A.FCurrName, B.FCurrName);</div><div class="code_line">&nbsp;&nbsp;Result := A.FValue &#60; B.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">class operator TMoney.LessThanOrEqual(A, B: TMoney): boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;CheckCurrency(A.FCurrName, B.FCurrName);</div><div class="code_line">&nbsp;&nbsp;Result := A.FValue &#60;= B.FValue;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><br>
Два поля, CurrName (имя валюты) и Value, собственно значение суммы. <br>
Единственный способ задать начальное значение это вызов конструктора. В который надо подать значение TCurrency, константу. <br>
При арифметических действиях и сравнениях осуществляется проверка на одинаковые единицы измерения.<br>
Больше ничего в этом типе не должно быть, пересчет и форматирование совсем другие задачи.]]></description>
        <author>Romkin</author>
        <category>Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	