【问题标题】:How to display a floating point value as scientific parameter in Delphi如何在 Delphi 中将浮点值显示为科学参数
【发布时间】:2011-02-14 13:57:13
【问题描述】:

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

【问题讨论】:

  • 如果我是你,我会像你一样继续前进。您不太可能找到完全符合您要求的东西。
  • 我建议使用 U+00B5 MICRO SIGN (µ) 而不是 U+0075 LATIN SMALL LETTER U (u)。
  • 不过,我完全同意@David:没有理由不自己编写这样的函数。
  • @Andreas 和@David - 谢谢,我也这么想。布赖恩。
  • 按照规范方法,1e-4 V 应归一化为 0.1 mV

标签: string delphi floating-point scientific-notation


【解决方案1】:

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

支持SI prefixes范围!

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');

【讨论】:

  • 不错。与我们所做的类似!
【解决方案2】:

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

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

【讨论】:

  • 我去看看 - 我认为可能存在的类似于绝地武士的东西。我知道 Turbopower 几年前在其科学单位中进行了很多转换,但当然都是 pre-unicode。
【解决方案3】:

在这里试试: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;

【讨论】:

  • Brian 知道如何将浮点数转换为字符串。他想要一个根据值的大小选择 V 或 µV 的例程!
  • @Dave 有一点聪明才智,他可以用我提供的东西和简单的例程来测试值的数量级(位数)。我可以并且假设这对我们很多人来说都很简单。 LOL ...hmmm if value > xxx then V else if
  • 他已经按照你说的做了。这是他问题的核心。
猜你喜欢
  • 2021-12-17
  • 2016-04-08
  • 2020-12-29
  • 2014-09-25
  • 2014-05-20
  • 2010-10-14
  • 1970-01-01
相关资源
最近更新 更多