如何在 Delphi 中将浮点值显示为科学参数

Posted

技术标签:

【中文标题】如何在 Delphi 中将浮点值显示为科学参数【英文标题】:How to display a floating point value as scientific parameter in 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 【参考方案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 他已经按照你说的做了。这是他问题的核心。

以上是关于如何在 Delphi 中将浮点值显示为科学参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在JavaScript中将值为1.10的数字转换为无损浮点值[重复]

如何在 Delphi 中将单个枚举值标记为已弃用

在没有科学计数法的 SQL Server 中将 float 转换为 varchar

如何在javascript中将浮点值转换为日期时间格式

如何在 Delphi 2010 中将参数传递给 flash 电影?

如何在 PySpark 1.6 中将 DataFrame 列从字符串转换为浮点/双精度?