Страница 1 из 1

ObjectNodeX и количество знаков после запятой

Добавлено: 22 авг 2017, 17:35
Qwe1
Добрый день! Подскажите, пожалуйста, как повлиять на количество знаков после запятой в значениях, которая возвращает функция ObjectNodeX|Y. Не в плане округления, а наоборот - выдать, к примеру, 4 знака или больше.

Пример:

Код: Выделить всё

Dim myObj As Object
Set CoordSys NonEarth Units "m" Bounds (-100000, -100000) (100000, 100000)

Create Region Into Variable myObj 1 6
(81234.123456, 1) (80123.123456, 2) (8012.123456, 3) (801.123456, 4) (80.123456, 5) (8.123456, 6)

Print ObjectNodeX(myObj, 1, 1)
Print ObjectNodeX(myObj, 1, 2)
Print ObjectNodeX(myObj, 1, 3)
Print ObjectNodeX(myObj, 1, 4)
Print ObjectNodeX(myObj, 1, 5)
Print ObjectNodeX(myObj, 1, 6)
Результат:

Код: Выделить всё

81234.12
80123.12
8012.12
801.124
80.1235
8.1235

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 22 авг 2017, 19:54
thegeo
Попробуйте так

Код: Выделить всё

print Format$(ObjectNodeY(myObj, 1, 5),"#.###0")

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 23 авг 2017, 09:01
Qwe1
Попробовал: для 4 разрядов и более выдает, почему-то, "81234.1235" - больше 4 цифр после запятой не выдает + непонятное округление. То есть, задаю #.##### (или 0) и "хвост" числа получается ".1235"...

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 23 авг 2017, 11:02
Sibit
Потому, что координаты хранятся в дискретных значениях. Точность = (границы координатной системы)/2*10^9 (это такое магическое число). В вашем случае 9 - 5 = 4, т.е точность 0.0001. Попробуйте уменьшить значения в выражении Bounds, сразу точность подскочит.

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 23 авг 2017, 11:54
Qwe1
А есть ли способ получить от ObjectNodeX число Float с нужным числом разрядов и без округления? Или пусть это будет текст, но без округления последнего разряда?

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 23 авг 2017, 12:07
Sibit
Не понял вопрос. ObjectNodeX возвращает свойство объекта в текущей системе координат. Т.е. точнее чем оно там храниться получить нельзя.

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 23 авг 2017, 12:33
Qwe1
См. первое сообщение: координата X = 81234.123456 Теперь получим ее: ObjectNodeX(myObj, 1, 1); если учесть Ваше замечание по поводу дискрета, то результат должен быть (хотелось бы именно такой увидеть) = 81234.1234 (4 знака, что неплохо). Я же вижу 81234.12 (два знака, если сделать Print). Если же применить форматирование, как предложил thegeo, то получается 81234.1235 - текстовое представление, то есть не Float и округление.

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 23 авг 2017, 12:42
Sibit
Тогда встречный вопрос, а как по вашему работает print ? Нет ли там неявного преобразования к строке?
А что будет если выводить значения так : Print Format$(ObjectNodeX(myObj, 1, 1),"#.####################") ? :)

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 23 авг 2017, 15:51
Qwe1
Наверно есть, я уже думал об этом.
А выводить будет те же 4 знака по сути (для первой координаты X из примера), то есть "Число.12350000000002".

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 24 авг 2017, 06:53
Sibit
Qwe1 писал(а):
23 авг 2017, 15:51
А выводить будет те же 4 знака по сути
Неверно :) будет вы водить число полностью. Вообще, это проще проверить чем объяснить.
Просто попробуйте поменять значения границ у текущей системы координат, и посмотреть вывод функции. В вашем случае округление происходит 2 раза, при создании объекта, и при выводе координат. print тоже делает делает округление при выводе, но оно на вычисления не влияет.

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 24 авг 2017, 09:43
Qwe1
Ключевой момент здесь, видимо действительно в том, что округление происходит на этапе создания объекта под выбранную систему координат с соответствующим охватом! Поэтому, извлекая координату, мы получаем округленный результат с определенным числом знаков. Print выводит число как есть, правда сам определяет сколько знаков вывести, это, опять же, ни как не изменить, разве что использовать текстовое представление с помощью Format.

Re: ObjectNodeX и количество знаков после запятой

Добавлено: 25 авг 2017, 05:38
Boris
К чему такие гадания и предположения? MIF файл выложите и все будет ясно - какие границы, и какая точность представления, и что в реальности "внеслось" в таблицу.