3

我有一个应用程序将使用测量值,特别是低至 1/16 英寸。我真的很想为最终用户提供一种方便的方式来输入一个包含小数部分的值,例如 3 7/16。我意识到我可以要求用户只输入十进制值(即 3.1875),但我真的想要一个更好的方法。有谁知道可以轻松输入的下拉或旋转控件?(理想情况下是控件的 DB 版本。)

4

2 回答 2

8

你可以简单地做

function FractionToFloat(const S: string): real;
var
  BarPos: integer;
  numStr, denomStr: string;
  num, denom: real;
begin
  BarPos := Pos('/', S);
  if BarPos = 0 then
    Exit(StrToFloat(S));
  numStr := Trim(Copy(S, 1, BarPos - 1));
  denomStr := Trim(Copy(S, BarPos + 1, Length(S)));
  num := StrToFloat(numStr);
  denom := StrToFloat(denomStr);
  result := num/denom;
end;

这将接受由3/7和示例的形式的输入-4 / 91.5

要允许整数部分,请添加

function FullFractionToFloat(S: string): real;
var
  SpPos: integer;
  intStr: string;
  frStr: string;
  int: real;
  fr: real;
begin
  S := Trim(S);
  SpPos := Pos(' ', S);
  if SpPos = 0 then
    Exit(FractionToFloat(S));
  intStr := Trim(Copy(S, 1, SpPos - 1));
  frStr := Trim(Copy(S, SpPos + 1, Length(S)));
  int := StrToFloat(intStr);
  fr := FractionToFloat(frStr);
  result := int + fr;
end;   

这还将接受由 示例的形式的输入1 1/2

于 2013-08-06T14:20:54.477 回答
0

我碰巧在多年前编写了一个控件,目前正在完成对它的更新,其中也包括公制转换。它允许用户和开发人员通过右键单击或在设计时设置模式在 ft in、dec in、dec ft、mm、cm、m 之间切换。它还可以处理四舍五入到最接近的第 16 位、第 32 位或任何您需要的度量标准。在大多数 delphi 组件站点上查看它,例如 torry.net 或我的旧站点http://www.enhancedtechsolutions.com/delphi/ 我希望在一两天内完成并发布新版本。

忘了提到最重要的部分:它叫 TMaskFtInch

于 2013-08-06T18:29:16.757 回答