单位换算 Delphi示例

unitConversion.XML  单位分类及对应关系

<?xml version="1.0" encoding="UTF-8"?>
<unitConversion>
	<weight title="重量">
		<t title="吨">1</t>
		<kg title="千克">1000</kg>
		<g title="克">1000000</g>
		<lb title="磅">0.00220462</lb>
	</weight>
	<length title="长度">
		<m title="米">1</m>
		<cm title="厘米">100</cm>
		<mm title="毫米">1000</mm>
		<km title="千米">0.001</km>
		<inch title="英寸">39.37</inch>
	</length>
	<volume title="体积">
		<m3 title="立方米">1</m3>
		<cm3 title="立方厘米">1000000</cm3>
		<mm3 title="立方毫米">1000000000</mm3>
		<km3 title="立方千米">0.000000001</km3>
		<inch3 title="立方英寸">61024</inch3>
	</volume>
	<area title="面积">
		<m2 title="平方米">1</m2>
		<cm2 title="平方厘米">10000</cm2>
		<mm2 title="平方毫米">1000000</mm2>
		<km2 title="平方公里">0.000001</km2>
		<acre title="公亩">0.01</acre>
		<inch2 title="平方英寸">1550.05</inch2>
	</area>
</unitConversion>

Delphi源码  单位换算单元

unit utUnitConversion;

interface
uses
  SysUtils,
  MSXML2_TLB;

  (*该函数返回ASourceVal相对ADestVal之间的单位系数
    AFilePath: XML文件路径
    ASourceUnit, ADestUnit: 源,目标单位
    Result: 返回的换算系数, 0表示配对失败
  *)
  function UnitConversion(const AFilePath, ASourceUnit, ADestUnit: string): Double;
implementation

function UnitConversion(const AFilePath, ASourceUnit, ADestUnit: string): Double;
var
  FXMLDoc : IXMLDOMDocument2;
  aNode : IXMLDOMNode;
  dSource, dDest : Double;
begin
  //创建XML对象
  FXMLDoc := CoDOMDocument40.Create;
  try
    //读取XML文件内容
    FXMLDoc.load(AFilePath);
    FXMLDoc.setProperty('SelectionLanguage', 'XPath');

    Result := 0;
    //查找源单位节点,不存在则返回
    aNode := FXMLDoc.selectSingleNode('unitConversion//'+ASourceUnit);
    if aNode = nil then exit;
    //获取源单位值
    dSource := StrToFloatDef(aNode.text, 0);
    //查找目标单位节点,不存在则返回
    aNode := aNode.parentNode.selectSingleNode(ADestUnit);
    if aNode = nil then exit;
      
    //获取目标单位值
    dDest := StrToFloatDef(aNode.text, 0);

    //分母为0时返回
    if dDest = 0 then exit;

    //求两者之间系数
    Result := dSource / dDest;
  finally
    FXMLDoc := nil;
  end;
end;

end.


 

 

调用方式

Result := UnitConversion('unitConversion.XML', 'g', 'kg');


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值