Как отобразить значение с плавающей запятой в качестве научного параметра в Delphi - PullRequest
4 голосов
/ 14 февраля 2011

Нам часто требуется отображать значения с плавающей запятой в научной форме с множителем и единицами, например, значение 1500 В (вольт) будет отображаться как 1,5 кВ.Очень маленькое напряжение 1e-4 В будет отображаться как 100 мкВ.В течение многих лет мы использовали внутренне созданную подпрограмму, чтобы сделать это преобразование с плавающей запятой в строку, но я был недавно удивлен, было ли такое средство более общедоступным?

Ответы [ 3 ]

4 голосов
/ 14 февраля 2011

Я использую эту функцию 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');
1 голос
/ 14 февраля 2011

Если ваша цель - сделать ваши подпрограммы более «родными», вы можете взглянуть на модули ConvUtils и StdConvs и посмотреть, сможете ли вы основать свои подпрограммы на функциях преобразования, предлагаемых этими модулями.(Не уверен, когда эти единицы были введены. Быстрый поиск в Google предлагает Delphi 6)

Но это не обязательно многого достигнет для вас.(В зависимости от того, чего вы хотите достичь)

0 голосов
/ 14 февраля 2011

Попробуйте здесь: 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...