2010-03-23 5 views
0

Я сохраняю список цифр (как двойной) в текстовом файле, а затем снова считываю их.Сокращение десятичных знаков в Delphi

Однако, когда я прочитал их из текстового файла, цифры помещаются в текстовое поле как 1.59993499, например, вместо 1.6.

AssignFile(Pipe, 'EconomicData.data'); 
    Reset(Pipe); 
    For i := 1 to 15 
    Do ReadLn(Pipe, SavedValue[i]); 
    CloseFile(Pipe); 
    Edit1.Text := FloatToStr(SavedValue[1]); 

Текст в Edit1.Text, из приведенного выше кода, будет 1,59999 ... вместо 1.6 в текстовом файле. Как я могу это сделать, чтобы текстовое поле отображало исходное значение (1.6)?

ответ

4

вы можете использовать FormatFloat Функция

var 
    d: double; 
begin 
d:=1.59993499 ; 
Edit1.Text:=FormatFloat('0.0',d); //show 1.6 
end; 
2

К сожалению, я не был уверен, будет ли он удовлетворить ваши требования, но мой первоначальный ответ был использовать:

Format('%n', [SavedValue[1]]);

+0

Я разработал его, dwoz, спасибо! (Для кого-либо другого, вы заменяете «FloatToStr (SavedValue [1]);« с «Format» («% n», [SavedValue [1]]); « – chendriksen

1

Просто осторожно при использовании плавающих точек. Если вы собираетесь выполнять вычисления с использованием значений, то вам лучше использовать либо тип валюты, либо целое число, и подразумевая десятичную точку до сохранения. Как вы заметили, значения с плавающей запятой являются аппроксимациями, и ошибки округления неизбежно будут связаны.

Например, можно сказать, что вы хотите сохранить десятые в своей программе (1.6), просто создайте целочисленную переменную и для всех интенсивных целей подумайте об этом как десятые. Когда вы идете, чтобы отобразить значение, то используйте следующее:

Format('%n',[SavedValue[1]/10]); 

валюты представляет собой целое число типа с подразумеваемой десятичной тысячных.

+1

Лично я бы сохранил пользовательский ввод« как есть » »и затем работать с ним, когда это необходимо. Таким образом, сохраняйте текст и конвертируйте его только тогда, когда это необходимо. Таким образом, вы не будете терпеть эту проблему. – mj2008

+0

@ mj2008, проблема заключается в том, что вы выполняете вычисления, не рассчитывая на то, что вы думаете, а приближение. – skamradt

Смежные вопросы