StrToFloat — Функция Delphi

StrToFloat — Функция Delphi

В этом уроке мы рассмотрим функции преобразования чисел в строки и строк в числа.
Давайте рассмотрим часто используемые функции StrToInt, IntToStr, FloatToStr, StrToFloat. Во многих случаях эти функции являются очень полезными в том плане, что они позволяют преобразовывать целочисленные и нецелочисленные переменные типов Integer, Byte, Double, Real и т.п. в их строковое представление в переменную типа String и обратно, если это возможно. Рассмотрим непосредственно сами функции по порядку.
[cc lang=»delphi»]var a: integer;
s: string;
begin
a := 12345;
s := IntToStr(a);
// в результате переменная s будет содержать в себе строку ‘12345’
end;[/cc]
Т.е. функция IntToStr позволяет преобразовывать целочисленную переменную типа integer или byte в ее строковое представление в переменную типа string;

Обратную возможность реализовывает функция StrToInt.
[cc lang=»delphi»]var a: integer;
s: string;
begin
s := ‘12345’; // В s должно быть введено обязательно целочисленное число без лишних символов!
// иначе программа, во время выполнения «конвертации» завершит свою работу
// с ошибкой.
a := StrToInt(s);
// в результате переменная a будет содержать в себе число 12345.
end;[/cc]

Те же возможности нам помогают реализовать функции FloatToStr и StrToFloat, однако они уже позволяют работать с нецелочисленными переменными типа Double, Real и т.п. Работа с ними абсолютно аналогична работе с функциями IntToStr и StrToInt.
[note]Стоит отметить одну важную особенность при переводе строки в нецелочисленное число. В качестве плавающей запятой в «строках-числах» нужно использовать символ «точка», а не символ «запятая». При переводе нецелочисленного числа в строку эта особенность учитывается функцией FloatToStr автоматически.[/note]

Delphi: string to float

взялся быстренько утилитку на дельфях написать (в delphi очень быстро и удобно создаётся интерфейс)
и с ужасом обнаружил, что совсем забыл паскаль :(.
народ как преобразовать строку типа string, в которой лежит например вот это ‘-54.567801’
в переменную float (в паскале как я помню это тип single).
функция IntToFloat выдаёт ошибку, т.к. требует запись вида ‘xxx.. Exxx. ‘
любители delphi помогите бывшему соратнику по языку

Любопытно — и как же функция inttofloat связана со строками? ;-) Пробуй для разнообразия StrToFloat ;-)

Zeresha
извиняюсь очепятался я, конечно StrToFloat

kroll
Бери Builder и не парься с паскалём :)

CyberDemon
Бери Builder и не парься с паскалём :
Извини за мою фразу, но: сразу видно что ты НЕ ковырялся в исходниках VCL. Они изначально были и есть на Pascal/Delphi, сама IDE написана на Delphi

Вот такой код срабатывает на ура:

var
S : String;
f : Real;
begin
s := ‘-54,567801’;
f := StrToFloat(s);
Label1.Caption := FloatToStr(f);
end;

или я не понял вопроса?

Проблема, наверное, в настройках виндов. «Языки и стандарты» надо смотреть, параметр «разделитель целой и дробной частей» — запятая там или точка.

можно не переводить:

var
x,y : variant;
begin
x := 0.7865;
y := x/234;
label1.caption := y;
end;

никакого перевода из типа в тип не нужно :)

lpe
Zeresha
у меня в строке в качестве разделителя используется точка, видимо в этом проблема, проект находится дома, проверить смогу только вечером

andycount
мне нужно из строки получить float, а не наоборот

YgriK
А причем тут ковыряние в исходниках ? Вроде разговор идет про то как в Паскале (Дельфи) преобразовать строку в число. Так как чел с Сей пришел — я ему и дал совет — Билдер. Если не ошибаюсь, у Билдера и Дельфей есть много-много общего.

глобальная переменная decimalseparator содержит знак, который используется в качестве десятичной точки.
если ты используешь точку в качестве разделителя, то decimalseparator := ‘.’; и вуаля! :)

По моему «национальные настройки» это мерзопакость.Их придумали-то американцы,которые в чужих национальных особенностях абсолютно ни бум-бум.Не нужны абсолютно никому,и от них одни только проблемы.

Отсюда мораль: гденидь в начале пишем DecimalSeparator:=’.’;
и всего делов.
Работает на ура.

спасибо всем, вечером решу проблему.
не ожидал столько ответов на такой маленький вопрос, дружный вы народ, pascal-цы 8)

CyberDemon
Человек спросил про Delphi. А почему НЕ Builder — это уже НЕ в этой ветке.

StrToFloat — Функция Delphi

Помогите разобратся с глюком.
Есть Edit1 , в него вбивается число типа x(число),0W(опять же любое число).
При его считывании в переменную происходит глюк.
y=StrToFloat(Edit1->Text);
значение y=x,0W00343184758(после 4 знака вылезают рандомные числа).

С чем может быть связано и чем лечится?
Заранее благодарен.

От: Leonid Troyanovsky
Дата: 10.03.04 10:22
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Есть Edit1 , в него вбивается число типа x(число),0W(опять же любое число).

А почему Real число должно иметь такой странный формат?
AFAIK, д.б. что-то вроде : -1.234e+456,
т.е. с «x(число),0W(опять же любое число)»- ничего общего.

А>С чем может быть связано и чем лечится?

Что, собс-но, нуждается в лечении?

От: Dimonka
Дата: 10.03.04 11:08
Оценка:

Здравствуйте, Leonid Troyanovsky, Вы писали:

LT> А почему Real число должно иметь такой странный формат?
LT> AFAIK, д.б. что-то вроде : -1.234e+456,
LT> т.е. с «x(число),0W(опять же любое число)»- ничего общего.

А>>С чем может быть связано и чем лечится?

LT> Что, собс-но, нуждается в лечении?

А есть какой-нибудь простенький более-менее стандартный парсер текста для Float, который не зависит от региональных настроек?
Пример возможных чисел:
-1E4, -0, 0, 12.78E-2, 12, NA

От: s.ts
Дата: 10.03.04 12:06
Оценка: +1

Здравствуйте, Dimonka, Вы писали:

D>Здравствуйте, Leonid Troyanovsky, Вы писали:

LT>> А почему Real число должно иметь такой странный формат?
LT>> AFAIK, д.б. что-то вроде : -1.234e+456,
LT>> т.е. с «x(число),0W(опять же любое число)»- ничего общего.

А>>>С чем может быть связано и чем лечится?

Илон Маск рекомендует:  Что такое код inp

LT>> Что, собс-но, нуждается в лечении?

D>А есть какой-нибудь простенький более-менее стандартный парсер текста для Float, который не зависит от региональных настроек?
D>Пример возможных чисел:
D>-1E4, -0, 0, 12.78E-2, 12, NA

дык что не устраивает в StrToFloat ?

От: Rook http://www.alsedi.com
Дата: 10.03.04 15:11
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Помогите разобратся с глюком.
А>Есть Edit1 , в него вбивается число типа x(число),0W(опять же любое число).
А>При его считывании в переменную происходит глюк.
А>y=StrToFloat(Edit1->Text);
А>значение y=x,0W00343184758(после 4 знака вылезают рандомные числа).

А>С чем может быть связано и чем лечится?
А>Заранее благодарен.

лечится прочтение хелпа, к примеру. В котором всё очень неплохо написано, как и чего делать.

floating point conversion routines
Delphi syntax:

Use StrToFloat to convert a string, S, to a floating-point value. S must consist of an optional sign (+ or -), a string of digits with an optional decimal point, and an optional mantissa. The mantissa consists of ‘E’ or ‘e’ followed by an optional sign (+ or -) and a whole number. Leading and trailing blanks are ignored.

The DecimalSeparator global variable or its TFormatSettings equivalent defines the character that is used as a decimal point. Thousand separators and currency symbols are not allowed in the string. If S doesn’t contain a valid value, StrToFloat raises an EConvertError exception.

От: Dimonka
Дата: 22.03.04 15:57
Оценка:

Здравствуйте, s.ts, Вы писали:

LT>>> Что, собс-но, нуждается в лечении?

D>>А есть какой-нибудь простенький более-менее стандартный парсер текста для Float, который не зависит от региональных настроек?
D>>Пример возможных чисел:
D>>-1E4, -0, 0, 12.78E-2, 12, NA

ST>дык что не устраивает в StrToFloat ?

Ещё вопрос на эту тему, а если допустим надо задавать свойство обьекта в рантайме:
SetPropValue() и заранее не знаешь, что это за свойство (а ведь не только float зависит от региональных настроек).. Тогда получается надо хранить всегда свои региональные настройки, самому переводить переменную в нужный тип.. Геморой какой-то..
И что делать в Delphi5?

От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 22.03.04 21:43
Оценка:

Избыточные знаки — следствие недостаточной точности представления чисел.
Десятичную дробь в общем случае принципиально невозможно представить в виде конечной двоичной дроби, а именно такое представление данных и использует процессор.

Какой тип данных у тебя имеет переменная y? Вероятно, single? Попробуй использовать double, точность повысится. А почему для тебя так важны эти лишние знаки, ведь это погрешность очень малого порядка? Если надо просто как-то красиво вывести потом результат каких-то вычислений над y, то можно оставить y таким же, а уже результат усекать при преобразовании в string, см. хелп по функциям Str, FloatToStr, FormatFloat и Format.

От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 22.03.04 21:50
Оценка:

Имеется в виду, вероятно, что x — это последовательность цифр, и w — тоже (но, имхо, может быть пустой).
Иначе говоря, <[0-9]+>,0 <[0-9]*>в терминах регулярных выражений Delphi.
А проблема в том, что при преобразовании этой строки в число результат получается с некоторой погрешностью.

StrToFloat — Функция Delphi

Описание
Функция преобразовывает строковое представление числа с плавающей запятой в значение типа Extended. В строке допускаются следующие символы: ‘+’ или ‘-‘, цифровые символы, точка (десятичный разделитель), знак экспоненты ‘E’ или ‘e’, сопровождаемый целым числом со знаком. Пробелы в начале и конце строки игнорируются. Разделители тысяч и символы валюты в синтаксисе строки не допускаются. Символ, который должен использоваться в качестве десятичной точки, определяется глобальной переменной DecimalSeparator. Если строка содержит недопустимое значение, то возникает исключение EConvertError.

Пример
var
X: Extended;
begin
try
X:= StrToFloat( Edit1.text);
except
MessageDlg( ‘Значение указано не верно!’, mtInformation, [mbOk], 0);
end;
end;

Convert string with commas to float

Is there a built-in Delphi function which would convert a string such as ‘3,232.00’ to float? StrToFloat raises an exception because of the comma. Or is the only way to strip out the comma first and then do StrToFloat?

9 Answers 9

Do you exactly know, that ‘.’ is decimal separator and ‘,’ is thousand separator (always)? If so, then you should fill the TFormatSettings record and pass it to StrToFloat.

below is what i use. there might be more efficient ways, but this works for me. in short, no, i don’t know of any built-in delphi function that will convert a string-float containing commas to a float

Try: StrToFloat(StringReplace(‘3,232.00’, ‘,’, ») It should get rid of the commas before doing the conversion.

Преобразования типов

Преобразования типов

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

Пользователь воспринимает это так, будто вводит сразу цифры, однако мы то знаем, что это строка только символов, изображающая число. И чтобы действительно превратить ее в число, приходится использовать преобразования типов. Некоторыми функциями, которые служат этим целям, мы уже пользовались, давайте упорядочим эти знания и изучим новые функции.

IntToStr()

Наиболее часто используемая функция . Как вы уже знаете, она принимает в качестве параметра целое число , и возвращает его в виде строки. Хотелось бы отметить еще одну особенность: эта функция предназначена для любого целого числа, не обязательно Integer . Если у вас есть переменная Byte , Word , Cardinal или Int64 , все это переменные целого типа, и для любой из них годится функция IntToStr() .

StrToInt()

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

Как видите, действия этих функций очень похожи, только в последнем случае приходится применять осторожность, чтобы не превысить диапазон возможных значений. Если вы заранее не знаете, какое число введет пользователь , лучше использовать Integer или Cardinal , если число без знака. Экономия памяти иной раз может вызвать серьезные ошибки в программе.

Илон Маск рекомендует:  Bdos, bdosx вызвать функцию dos

FloatToStr()

Эта функция принимает в качестве параметра вещественное число (то есть, число с запятой), и возвращает его в виде строки. Примеры применения почти аналогичны функции IntToStr() , однако есть одна особенность – если после запятой у Вас есть только нули, то функция вернет строку в виде целого числа:

Эта функция также предназначена для всех типов вещественных чисел.

StrToFloat()

Эта функция принимает в качестве параметра строку в виде вещественного или целого числа, и возвращает это вещественное число . Пример:

FormatFloat()

Эта функция по своему предназначению похожа на функцию FloatToStr() , однако она является гораздо более мощным инструментом. Эта функция не только возвращает вещественное число в качестве строки, но еще и позволяет задать желаемый формат этой строки. В прошлых примерах мы говорили, что функция FloatToStr() вместо строки ‘125,00’ выведет ‘125’. А если нужно все-таки ‘125,00’? Такое сплошь и рядом встречается, особенно в финансовой документации. Для этих целей и создана функция FormatFloat .

Она имеет два параметра – строку формата и само число. Строка может содержать следующие форматы:

Таблица 15.1. Возможные форматы FormatFloat()
Строка, указываемая в формате Примеры чисел
1234 -1234 0,5
1234 -1234 1
0.00 1234,00 -1234,00 0,50 0,00
#.## 1234 -1234 0,5
#,0.00 1 234,00 -1 234,00 0,50 0,00

Есть и другие варианты форматов, например, для представления числа в экспонентной форме, но они, как правило, не используются.

Поясним строку форматов подробней.

В первом случае показаны варианты возвращаемых строк, если строка форматов вообще не указана.

«Решетка» (#) работает также, как «ноль», с той разницей, что если на этом месте не окажется цифры, то «решетка» ничего не выведет, а «ноль» подставит в это место ноль.

Знак запятая здесь указывают для удобного отображения разрядности числа. Например, миллион будет выглядеть как строка ‘1 000 000’. Заметим, что на само число этот формат не оказывает никакого влияния, он нужен только для того, чтобы выводить число в удобочитаемой форме в виде строки.

StrToFloat — Функция Delphi

Помогите разобратся с глюком.
Есть Edit1 , в него вбивается число типа x(число),0W(опять же любое число).
При его считывании в переменную происходит глюк.
y=StrToFloat(Edit1->Text);
значение y=x,0W00343184758(после 4 знака вылезают рандомные числа).

С чем может быть связано и чем лечится?
Заранее благодарен.

От: Leonid Troyanovsky
Дата: 10.03.04 10:22
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Есть Edit1 , в него вбивается число типа x(число),0W(опять же любое число).

А почему Real число должно иметь такой странный формат?
AFAIK, д.б. что-то вроде : -1.234e+456,
т.е. с «x(число),0W(опять же любое число)»- ничего общего.

А>С чем может быть связано и чем лечится?

Что, собс-но, нуждается в лечении?

От: Dimonka
Дата: 10.03.04 11:08
Оценка:

Здравствуйте, Leonid Troyanovsky, Вы писали:

LT> А почему Real число должно иметь такой странный формат?
LT> AFAIK, д.б. что-то вроде : -1.234e+456,
LT> т.е. с «x(число),0W(опять же любое число)»- ничего общего.

А>>С чем может быть связано и чем лечится?

LT> Что, собс-но, нуждается в лечении?

А есть какой-нибудь простенький более-менее стандартный парсер текста для Float, который не зависит от региональных настроек?
Пример возможных чисел:
-1E4, -0, 0, 12.78E-2, 12, NA

От: s.ts
Дата: 10.03.04 12:06
Оценка: +1

Здравствуйте, Dimonka, Вы писали:

D>Здравствуйте, Leonid Troyanovsky, Вы писали:

LT>> А почему Real число должно иметь такой странный формат?
LT>> AFAIK, д.б. что-то вроде : -1.234e+456,
LT>> т.е. с «x(число),0W(опять же любое число)»- ничего общего.

А>>>С чем может быть связано и чем лечится?

LT>> Что, собс-но, нуждается в лечении?

D>А есть какой-нибудь простенький более-менее стандартный парсер текста для Float, который не зависит от региональных настроек?
D>Пример возможных чисел:
D>-1E4, -0, 0, 12.78E-2, 12, NA

дык что не устраивает в StrToFloat ?

От: Rook http://www.alsedi.com
Дата: 10.03.04 15:11
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Помогите разобратся с глюком.
А>Есть Edit1 , в него вбивается число типа x(число),0W(опять же любое число).
А>При его считывании в переменную происходит глюк.
А>y=StrToFloat(Edit1->Text);
А>значение y=x,0W00343184758(после 4 знака вылезают рандомные числа).

А>С чем может быть связано и чем лечится?
А>Заранее благодарен.

лечится прочтение хелпа, к примеру. В котором всё очень неплохо написано, как и чего делать.

floating point conversion routines
Delphi syntax:

Use StrToFloat to convert a string, S, to a floating-point value. S must consist of an optional sign (+ or -), a string of digits with an optional decimal point, and an optional mantissa. The mantissa consists of ‘E’ or ‘e’ followed by an optional sign (+ or -) and a whole number. Leading and trailing blanks are ignored.

The DecimalSeparator global variable or its TFormatSettings equivalent defines the character that is used as a decimal point. Thousand separators and currency symbols are not allowed in the string. If S doesn’t contain a valid value, StrToFloat raises an EConvertError exception.

От: Dimonka
Дата: 22.03.04 15:57
Оценка:

Здравствуйте, s.ts, Вы писали:

LT>>> Что, собс-но, нуждается в лечении?

D>>А есть какой-нибудь простенький более-менее стандартный парсер текста для Float, который не зависит от региональных настроек?
D>>Пример возможных чисел:
D>>-1E4, -0, 0, 12.78E-2, 12, NA

ST>дык что не устраивает в StrToFloat ?

Ещё вопрос на эту тему, а если допустим надо задавать свойство обьекта в рантайме:
SetPropValue() и заранее не знаешь, что это за свойство (а ведь не только float зависит от региональных настроек).. Тогда получается надо хранить всегда свои региональные настройки, самому переводить переменную в нужный тип.. Геморой какой-то..
И что делать в Delphi5?

От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 22.03.04 21:43
Оценка:

Избыточные знаки — следствие недостаточной точности представления чисел.
Десятичную дробь в общем случае принципиально невозможно представить в виде конечной двоичной дроби, а именно такое представление данных и использует процессор.

Какой тип данных у тебя имеет переменная y? Вероятно, single? Попробуй использовать double, точность повысится. А почему для тебя так важны эти лишние знаки, ведь это погрешность очень малого порядка? Если надо просто как-то красиво вывести потом результат каких-то вычислений над y, то можно оставить y таким же, а уже результат усекать при преобразовании в string, см. хелп по функциям Str, FloatToStr, FormatFloat и Format.

Илон Маск рекомендует:  Загадочный тип pchar
От: Slicer [Mirkwood] https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 22.03.04 21:50
Оценка:

Имеется в виду, вероятно, что x — это последовательность цифр, и w — тоже (но, имхо, может быть пустой).
Иначе говоря, <[0-9]+>,0 <[0-9]*>в терминах регулярных выражений Delphi.
А проблема в том, что при преобразовании этой строки в число результат получается с некоторой погрешностью.

Функции форматирования

Function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): String;

Преобразовывает число с плавающей запятой, в строковое представление.

Параметр Format определяет формат результирующей строки.

Параметр Precision определяет точность данного значения. Он должен быть равен 7 или меньше для значений типа Single, 15 или меньше для значений типа Double и 18 или меньше для значений типа Extended.

Значение параметра Digit зависит от выбранного формата.

Возможные значения параметра Format описаны ниже.

  • ffGeneral — общий формат числа. Значение преобразовывается в самую короткую возможную десятичную строку, использующую фиксированный или научный формат. Конечные нули удаляются, а десятичная точка появляется только в случае необходимости. Параметр Digit определяет минимальное число цифр в порядке числа (между 0 и 4).
  • ffExponent — научный формат. Значение преобразовывается в строку вида «-d. ddd . E + dddd». Общее количество цифр в результирующей строке (включая одну перед десятичной точкой) определяется параметром Precision. Параметр Digit определяет минимальное число цифр в порядке числа (между 0 и 4).
  • ffFixed — фиксированный формат. Значение преобразовывается в строку вида «-ddd. ddd . «. Число цифр после десятичной точки определяется параметром Digit и должно быть не больше 18. Если число цифр слева от десятичной точки больше, чем определено в параметре Precision, используется научный формат.
  • ffNumber — числовой формат. Значение преобразовывается в строку вида «-d, ddd, ddd.ddd . «. Формат ffNumber соответствует формату ffFixed, за исключением того, что возникающая в результате строка содержит разделитель тысяч.
  • ffCurrency — денежный формат. Значение преобразовывается в строку, которая представляет собой денежную величину. Преобразование управляется глобальными переменными CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator и DecimalSeparator, которые определяются соответствующими значениями раздела «Язык и стандарты» Панели управления Windows. Число цифр после десятичной точки определяется параметром Digits и должно быть не больше 18.

Если параметр Value принимает бесконечное значение (с плюсом или минусом), функция возвращает соответственно «INF» или «-INF».

Function StrToFloat(const S: String): Extended;

Преобразовывает данную строку в число с плавающей запятой. Строка должна состоять из необязательного знака (+ или -), последовательности цифр с необязательной десятичной точкой и необязательным «E» или «e», сопровождаемым целым числом со знаком.

Глобальная переменная DecimalSeparator определяет символ, который будет использоваться как десятичная точка. Разделитель тысяч и обозначения денежной единицы не допускаются. Если строка имеет неверный формат, возбуждается исключительная ситуация EConvertError.

Function IntToStr(Value: Integer): String;

Преобразовывает целое число в строку.

Function StrToInt(const S: String): Integer;

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

Delphi для начинающих (3 урок)

Рассмотрим типы данных:

String,Integer,Double.

IntToStr,StrToInt,StrToFloat,FloatToStr.

Тип данных String используется, чтобы хранить последовательность символов (предложения).

Тип Integer — целое число, размер которого не гарантируется. Это — основной целочисленный тип в Delphi.

Тип Double является общим типом с плавающей запятой в Delphi.

i:integer; //Присваиваем переменной тип Integer (целое число)

s:string; //Присваиваем переменной тип String (строка)

d:double;//Присваиваем переменной тип Duoble (число с плавающей запятой)

Нужно иметь ввиду что, мы не сможем вывести переменную i с типом интежер на экран, так как это числовая переменная. Для того что-бы вывести её на экран нам нужно преобразовать её в Строковую переменную. Для этого и существует функция IntToStr (из числа в строку).

Ну и наоборот со строковой переменной мы не сможем производить никаких вычислений. Для этого сначало нужно строку перевести в число, функцией IntToStr.

i:=StrToInt(s)+5; //тут S обязательно должна быть числом, которое мы преобразуем из строковой переменной в числовую и записываем результат в нашу числовую переменную.

Теперь давайте выведем наше число на экран:

Сначала преобразуем его в строку и запишем в нашу строковую переменную

s:=IntToStr(i);

выведем результат в всплывающем окне

showmessage(s);

Но лучше и правильнее не создавать лишних переменных, а сделать просто

showmessage(IntToStr(i)); //Без использования переменной s

Теперь напишем программку, которая будет складывать два числа и выводить результат в Лейбле.

Кидаем на нашу форму 2 Edit’a, Label и Button.

По нажатию на кнопку (Button) вешаем код:

String,Integer,Double.

Delphi 5 — результаты StrToFloat differntly на WinXP и Win2K

У меня есть эта странная проблема, что новообращенный струны на моей машине и сервере получает различные результаты, например:

Button1Click результаты на моей машине WinXP в качестве «1,234» не является допустимым значением с плавающей точкой, тогда как на машине Win2K это работает просто отлично.

Button2Click на другом конце ведет себя на моем WinXP но приводит к «1,234» не является допустимой ошибка с плавающей запятой.

Обе машины имеют региональные настройки, установленные на «немецкий (Австрия)» — любые идеи относительно того, почему это происходит, или, по крайней мере, почему диалог региональные-настройки действительно показывает различный характер DecimalSeparator, чем Delphi «DecimalSeparator» и «GetLocaleChar (GetThreadLocale, LOCALE_SDECIMAL , »)?

С уважением, Reinhard

то DecimalSeparator переменная хранит значение десятичного разделителя Windows , как определено в региональных настройках. Если десятичная точка появляется в строке для преобразования с StrToFloat функции , то он должен совпадать с текущим значением DecimalSeparator. Я считаю , что хотя региональные настройки соответствуют десятичный разделитель должен быть различным в обеих системах. Вы можете проверить с помощью этого кода значения , установленного в обеих системах.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL