4

我们经常需要以带有乘数和单位的科学形式显示浮点值,例如 1500 V(伏特)的值将显示为 1.5 kV。1e-4 V 的非常小的电压将显示为 100 uV。多年来,我们一直使用内部创建的例程来进行这种浮点到字符串的转换,但我最近想知道这种方法是否更普遍可用?

4

3 回答 3

4

我正在使用这个 FormathWithPrefix 函数,对对数知之甚少...... :)

支持SI前缀范围!

function FormathWithPrefix(n: double; decimals: integer): string;
var
  index: integer;
const
  Prefixes: array[-9..9]of string = ('<', 'y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm', '',
    'k','M', 'G', 'T', 'P', 'E', 'Z', 'Y', '>');   
begin
  index := round((Ln(n) / Ln(10) - 1) / 3);
  if index > 9 then 
    index := 9;
  if index < -9 then 
    index := -9;
  result := (FloatToStrF(n / Exp(index * 3 * ln(10)) , ffFixed, 20, decimals) + Prefixes[index]);
end;

begin
  n := 1500;
  Writeln(FormathWithPrefix(n, 1),'V');
于 2011-02-14T18:22:19.387 回答
1

如果您的目标是让您的例程更加“原生”,您可以查看 ConvUtils 和 StdConvs 单元,看看您是否可以将例程基于这些单元提供的转换函数。(不确定这些单位是什么时候引入的。快速谷歌搜索建议使用 Delphi 6)

但这不一定对您有多大帮助。(取决于您要实现的目标)

于 2011-02-14T17:59:38.920 回答
0

在这里试试:http: //www.delphibasics.co.uk/RTL.asp? Name=FloatToStrF

特别是这个:`ShowMessage('Using 8,4 = '+FloatToStrF(amount1, ffFixed, 8, 4)); 会表明你可以使用这样的东西:

var 
  Answer:string;    
  thevolts:double;
begin
  Answer:= FloatToStrF(thevolts, ffFixed, 8, 4)+' kV'
end;
于 2011-02-14T14:46:52.620 回答