Есть поле Calculate типа String.
Ему присваиваются значения :
else Dataset.Values('Oct') = FloatFormat(Dataset.ValAsFloat('PriceMax10'),' ',',',2);
Но моем компьютере - все ок. Остальные поля типа Float тоже отображаются с ",".
А вот у коллеги на компьютере другой формат. У него все поля типа Float отображаются с "."
В результате на экране видны и цифры с точками и с запятыми.
Можно как-то привести все это к единому формату?
Нравится
Наталия, отображение разделителей определяется системными настройками Windows:
Панель управления - Язык и региональные настройки - Дополнительно:
Это я знаю. :)
Вопрос был - можно ли узнать непосредственно в Террасофте системные установки, чтобы метод FormaFloat брал или запятую или точку - в зависимости от системных установок.
тогда пропадает смысл в FloatFormat используйте RoundFloatValue(FloatValue, Precision)
"Андросов Дмитрий" написал:RoundFloatValue(FloatValue, Precision)
Попробовала. Несмотря на указание Precision все равно обрезаются цифры после запятой. Получаю 20 вместо 20,00.
Поясню еще раз :
Dataset.Values('Oct') - типа Calc(String)
Dataset.Values('PriceMax10') - типа Float
Все эти "превращения" делают для того, чтобы по просьбе клиента в случае нулевых сумм не показывать 0, а пустоту.
MessageBox(RoundFloatValue(Dataset.ValAsFloat('PriceMax01'), 2));
дает
0
0,45
20
Такое ощущение, что функциональность не срабатывает
Она срабатывает, но не предусматривает контроля количества знаков после запятой.
Я раскопал, что запятые как разделитель (со значением системной настройки) появляются только на уровне окон (карточки, гриды и т.д.), а sql, JS и датасеты работают с точками - поэтому RoundFloatValue и ей подобные могут дать вам только точку, а FloatFormat - только то, что вы ей определите.
Не нашел как из скриптов взять системную настройку. Вернее, нашел методы System.GetSystemSettingValue() и System.GetSystemSettingValueDef(), но не уверен, относительно того, как они работают, что возвращают и можно ли с их помощью взять то, что нужно
Формат разделителя настроить в Terrasoft нельзя - он подтягивается из операционной системы.
Установить количество знаков после запятой, отображаемых в элементе управления или реестре можно - для этого в датасете есть поле Precision:
Нельзя настроить - это понятно. Вопрос в том, можно ли его узнать? Зная его можно будет подставить в FloatFormat системную настройку и CalcField типа String не будет выбиваться из общего стиля)
У меня поле типа Calc - String. Потому вариант
-для этого в датасете есть поле Precision
мне совсем не подходит.
Наталия, узнать формат десятичного разделится средствами jscript можно так:
.2.toLocaleString().substr(1,1)
А вообще, если установить для поля датасета галку UseFixedFloatPart, не будет нужды использовать функцию FloatFormat.
Спрошу тогда здесь. В принципе все проблемы у меня решаются, если я буду использовать поле типа Calc Float. Но ! Тогда вопрос - можно ли для Float вместо пустых значений выводить пустоту, а не ноль? Если решить эту проблему, а именно она решалась с помошью типа Calc String, то все будет работать как надо.
Да, можно. Для этого надо присвоить полю значение
parseFloat(NaN);
это аналог null для чисел с плавающей запятой.
Переделала Calc string на Calc Float, в коде написала
if (IsEmptyValue(Dataset.Values('Payment01'))) { MessageBox('null'); Dataset.Values('Jan') = parseFloat(NaN); MessageBox(Dataset.Values('Jan')); }
В условие попадаю. И в результате вижу все равно "0"....
попробуйте Dataset.ValAsFloat а заодно и Dataset.DataFields.ItemsByName('sdfs').Value
Попробовала
Dataset.DataFields.ItemsByName('Jan').Value = parseFloat(NaN);
и
Dataset.ValAsFloat('Jan').Value = parseFloat(NaN);
- все равно выдает 0
Здравствуйте, Наталья!
Уточните, пожалуйста, куда Вы пытаетесь выводить полученное значение? Есть вероятность, что при выводе значения оно неявно приводится к типу контрола, куда оно выводится.
Кроме того, что показывает отладчик?
Полученое значения я вывожу на экран, в грид.
Красным я подчеркнула колонку, которую я переделала с Calc string в Calc float, и вместо 0,00 там должно быть пусто. Зеленым - колонка, где остался тип Calc string - там и есть пусто, если нет значения.
С отладчиком я не умею работать.
Здравствуйте, Наталья!
Дело в том, что все вычисляемые значения при выводе в реестр преобразуются к строке. А нулевое значение в поле типа Float при преобразовании в строку дает 0
В данном случае выходом будет сделать в реестре вычисляемое поле типа строка, и заменять нули пустыми значениями.
Анна, дело в том, что именно так я и делала с самого начала. Я использую поле Calc String для вывода данных. Изначально я пришла сюда с такой проблемой - для отображения в поле типа Calc String числа с двумя знаками после запятой, я использую метод
Dataset.Values('Oct') = FloatFormat(Dataset.ValAsFloat('PriceMax10'),' ',',',2);
который ВСЕГДА выдает число с "запятой". В то время как на компьютере у пользователя, в зависимости от системных установок, в качестве отделения десятых частей может использоваться и "точка". И речь шла не о смене системных настроек у пользователя, а о возможности МНЕ узнать системные настройки пользователя и подстроиться под них, т.е. для "точки" использовать
Dataset.Values('Oct') = FloatFormat(Dataset.ValAsFloat('PriceMax10'),' ','.',2);
Но на данный момент мы отложили этот вопрос, и оставили все как есть. Сюда по всему, на мой вопрос не существует решения/ответа.
"Alimova Anna" написал:Наталия, узнать формат десятичного разделится средствами jscript можно так:
.2.toLocaleString().substr(1,1)
Наталия, а вы это попробовали? У меня работает :twisted: