2011-02-14 56 views
4

我们经常需要以乘数和单位显示科学形式的浮点值,例如1500 V(伏特)的值将显示为1.5 kV 。 非常小的1e-4 V电压将显示为100 uV。多年来,我们使用内部创建的例程来使这个浮点数转换为字符串,但我最近怀疑这种方法是否更普遍可用?如何在Delphi中显示浮点值作为科学参数

+2

如果我是你,我会继续照顾你。你不可能找到完全按照你的意愿去做的事情。 – 2011-02-14 14:02:15

+4

我会建议U + 00B5 MICRO SIGN(μ)代替U + 0075 LATIN SMALL LETTER U(u)。 – 2011-02-14 14:21:21

+0

不过,我完全同意@David:没有理由不自己编写这样的函数。 – 2011-02-14 14:22:45

回答

0

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

特别这一个:`ShowMessage( '使用8,4 =' + FloatToStrF(amount1,ffFixed,8,4)); 将表明您可以使用这样的事情:

var 
    Answer:string;  
    thevolts:double; 
begin 
    Answer:= FloatToStrF(thevolts, ffFixed, 8, 4)+' kV' 
end; 
1

如果你的目标是使你的程序更加“本土化”,你可以看看在ConvUtils和StdConvs单位,看看你是否可以在基础的程序这些单位提供的转换功能。 (不知道什么时候推出这些单位,快速谷歌搜索建议Delphi 6)

但是,这不一定会为您取得多大成就。 (取决于你在找什么来实现)

4

我使用这个功能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');