Преобразование строки в TXSDecimal - PullRequest
2 голосов
/ 02 апреля 2019

Я пытаюсь преобразовать строку в SOAP TXSDecimal, это то, что у меня есть в настоящее время, поэтому значение в моем окне редактирования не сохраняется внутри Foo.Limit

Foo.limit := TXSDecimal(edtLimit.text);

PS: Foo.Limit - это TXSDecimal тип данных

Я тоже пробовал

Foo.limit.asAsBcd := edtLimit.text; // получить нарушение прав доступа

Так что я хочу знать, как конвертировать String в TXSDecimal

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Проверьте, назначено ли Foo.limit, если нет, вы можете создать и назначить его в конструкторе Foo.

Затем вам нужно преобразовать значение string в значение TBcd, вы можете использовать функцию FMTBcd.StrToBCD().

Foo.Limit.AsBcd := StrToBCD(edtLimit.Text);

1 голос
/ 02 апреля 2019

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

Второй фрагмент, по-видимому, неполный. Если вы получили нарушение прав доступа, скорее всего, потому что Foo.limit не назначен правильный TXSDecimal.

Итак, вы можете создать новый экземпляр, назначить его для Foo.limit и присвоить ему значение с плавающей запятой, например, так:

Foo.limit := TXSDecimal.Create;
Foo.limit.AsBcd := Edit1.Text;

Вы можете назначить строку для BCD, как указано выше, и она автоматически преобразует ее в числовое значение. Присвоение вызовет исключение (не нарушение прав доступа, а другой вид), если строка не содержит допустимого числа.

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

...