我们经常需要以科学形式显示具有乘数和单位的浮点值,例如1500 V(伏特)的值将显示为1.5 kV。 1e-4V的非常小的电压将显示为100uV。多年来我们一直使用内部创建的例程来使这个浮点数转换为字符串,但我最近想知道这种方法是否更普遍可用?
答案 0 :(得分: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');
答案 1 :(得分:1)
如果您的目标是让您的例程更“原生”,您可以查看ConvUtils和StdConvs单元,看看您是否可以将这些例程基于这些单元提供的转换功能。 (不确定何时引入这些单位。快速谷歌搜索建议德尔福6)
但这对您来说不一定会有很大帮助。 (取决于您希望实现的目标)
答案 2 :(得分: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;