У меня есть несколько простых строк кода:
var
vRecordValue:Double;
begin
vRecordValue:= someVariant;
Где someVariant - строка (тип 256).
В производственной системе у нас есть вариант «23,4», а vRecordValue становится 234. Я могу только воспроизвести, что мой системный разделитель - «,». В нашей производственной системе так и было, но мы изменили настройку и по-прежнему наблюдаем, как это происходит. Интересно отметить, что мы не можем воспроизвести это вообще, кроме как в режиме отладки (не знаю, какая здесь взаимосвязь) и путем выполнения простого теста.
Я исправил это явным преобразованием:
vRecordValue:= StrToFloatDef(VarToStrDef(someVariant, '0'), 0);
Вопросы:
- Есть ли другой способ игнорировать десятичную точку?
- Может ли кто-нибудь дать ссылку на то, как выполняется приведение по умолчанию из строки в двойное? Я хочу понять разницу.
- Есть ли способ кэширования разделителя, используемого в приведении по умолчанию, из значения при первом запуске кода? ... Сомнительно, но отчаянно пытается понять.
Спасибо,
Уэйн.