|
v7: Почему не равно? | ☑ | ||
---|---|---|---|---|
0
Масянька
15.01.14
✎
11:23
|
Доброе утро!
Чёт мне кажется, что я сошла с ума..... Процедура Анализ() Если СуммаОстаткиТМЦ = СуммаПоПартиямТМЦ Тогда Форма.НадписьСуммаОстаткиТМЦ.Цвет(0, 0, 128); Форма.НадписьСуммаПоПартиямТМЦ.Цвет(0, 0, 128); Иначе Форма.НадписьСуммаОстаткиТМЦ.Цвет(255, 0, 0); Форма.НадписьСуммаПоПартиямТМЦ.Цвет(255, 0, 0); КонецЕсли; КонецПроцедуры // Анализ Выводит: ост = 947211.85, парт = 947211.85 ост = Число, парт = Число не равно (вставила сообщить). Почему не равно-то? Спасибо. |
|||
1
zak555
15.01.14
✎
11:23
|
к доктору
|
|||
2
m-serg74
15.01.14
✎
11:25
|
(0) вставь Сообщить(СуммаОстаткиТМЦ - СуммаПоПартиямТМЦ)
|
|||
3
oslokot
15.01.14
✎
11:25
|
оба имеют тип значения число?
|
|||
4
Wobland
15.01.14
✎
11:26
|
вообще, сравнивать вещественные числа на равенство - моветон
|
|||
5
m-serg74
15.01.14
✎
11:26
|
(4) просветите...
|
|||
6
VladZ
15.01.14
✎
11:28
|
Покажи, что пишешь в "сообщить".
|
|||
7
Wobland
15.01.14
✎
11:28
|
(5) по-хорошему надо делать абс(А-Б)<епс, где епс - сравнительно малое число. 12.0001 и 12.0002 - довольно разные числа
|
|||
8
zak555
15.01.14
✎
11:29
|
(5)
2.9999999999999999999 = 3 ??? |
|||
9
Мулька
15.01.14
✎
11:30
|
7,8 +1.
|
|||
10
m-serg74
15.01.14
✎
11:30
|
(8) так как правильно, чтоб не моветон проверить равны два числа или нет
|
|||
11
VladZ
15.01.14
✎
11:31
|
(10) Округли до нужной точности.
|
|||
12
m-serg74
15.01.14
✎
11:31
|
(7) ну СуммаОстаткиТМЦ же, откуда .99999999999999999?
по идее ограничено до .00 должно быть то |
|||
13
Масянька
15.01.14
✎
11:32
|
Сообщить("ост = " + СуммаОстаткиТМЦ + ", парт = " + СуммаПоПартиямТМЦ);
Сообщить("ост = " + ТипЗначенияСтр(СуммаОстаткиТМЦ) + ", парт = " + ТипЗначенияСтр(СуммаПоПартиямТМЦ)); |
|||
14
Wobland
15.01.14
✎
11:32
|
(12) что там за сумма и что за остатки, мне пофих, я про моветон ;)
|
|||
15
m-serg74
15.01.14
✎
11:32
|
поэтому и написал (0) - (2)
|
|||
16
zak555
15.01.14
✎
11:32
|
Если Окр(СуммаОстаткиТМЦ,2) = Окр(СуммаПоПартиямТМЦ,2) Тогда
|
|||
17
m-serg74
15.01.14
✎
11:32
|
(14) )))
|
|||
18
VladZ
15.01.14
✎
11:33
|
(12) У тебя есть стопроцентная уверенность, что программа тебе показывает число именно в том виде, в каком оно хранится?
|
|||
19
m-serg74
15.01.14
✎
11:33
|
(18) есть сто процентная что это не так и что?
|
|||
20
Wobland
15.01.14
✎
11:34
|
(18) если взято прямо из БД, то можно на это крепко надеяться ;)
|
|||
21
Масянька
15.01.14
✎
11:34
|
Сделала: Если Число(СуммаОстаткиТМЦ) = Число(СуммаПоПартиямТМЦ) Тогда
Не равно.... |
|||
22
m-serg74
15.01.14
✎
11:35
|
(21) результат (2) покажи
|
|||
23
VladZ
15.01.14
✎
11:35
|
(21) Тебе ж говорят, округли до нужного знака.
|
|||
24
VladZ
15.01.14
✎
11:36
|
+23 см. (8)
|
|||
25
m-serg74
15.01.14
✎
11:36
|
(23) упрямая, зато не ленивая
|
|||
26
Принт
15.01.14
✎
11:36
|
(0) всё ясно
|
|||
27
zak555
15.01.14
✎
11:36
|
(21) см. в (16)
|
|||
28
Bigbro
15.01.14
✎
11:36
|
(21) в выводе точность 2 знака. сделай проверку округлив до 2 знаков. что будет?
|
|||
29
Масянька
15.01.14
✎
11:36
|
Сообщить("разность = " + (СуммаПоПартиямТМЦ - СуммаОстаткиТМЦ));
пишет: разность = 0 |
|||
30
Wobland
15.01.14
✎
11:37
|
(29) теперь округляй
|
|||
31
Wobland
15.01.14
✎
11:38
|
смотреть на значения переменных по ходу исполнения через Сообщить() - тоже моветон, от этого бородавки на руках растут
|
|||
32
m-serg74
15.01.14
✎
11:39
|
(31) через отладчик в 77? да ну его:) только в самом крайнем
|
|||
33
VladZ
15.01.14
✎
11:39
|
Масяня! Не томи! Получилось или нет? Мы же волнуемся! :)
|
|||
34
m-serg74
15.01.14
✎
11:40
|
(33) +++
|
|||
35
Масянька
15.01.14
✎
11:40
|
Разность = СуммаОстаткиТМЦ - СуммаПоПартиямТМЦ;
Разность = Окр(Разность, 5); вернуло: разность = 0. |
|||
36
Масянька
15.01.14
✎
11:41
|
(32) Я не умею им не пользоваться :(
|
|||
37
VladZ
15.01.14
✎
11:41
|
(35) Я тебя стукну сейчас! Зачем тебе округленная разность????
См. (16)!!!! |
|||
38
VladZ
15.01.14
✎
11:42
|
(36) Здесь он тебе не поможет.
|
|||
39
Масянька
15.01.14
✎
11:42
|
(37) Не надо меня стукать, я и сама щас стукнусь обо что нибудь...
|
|||
40
m-serg74
15.01.14
✎
11:42
|
(37) думаю без разницы... эффект все равно будет тот который ожидался
|
|||
41
Принт
15.01.14
✎
11:43
|
(0) стесняюсь спросить, а что не так?..
|
|||
42
m-serg74
15.01.14
✎
11:43
|
(41) не стесняйся, спрашивай :)
|
|||
43
Wobland
15.01.14
✎
11:44
|
(41) глаза не видят разницы. а она есть ;)
|
|||
44
zak555
15.01.14
✎
11:44
|
Масянька иди лучше торговать пирожками
|
|||
45
Масянька
15.01.14
✎
11:44
|
(37) О! Равно....
|
|||
46
forforumandspam
15.01.14
✎
11:44
|
(39) Не томи-же. Стукнулась уже? :)
|
|||
47
Wobland
15.01.14
✎
11:44
|
(45) дошло?
|
|||
48
m-serg74
15.01.14
✎
11:44
|
(45) Мечты сбываются (с)
|
|||
49
VladZ
15.01.14
✎
11:45
|
(41) Проблема в следующем: два равных числа неравны, что вызвало когнитивный диссонанс у Масяни.
|
|||
50
Масянька
15.01.14
✎
11:45
|
(47) Проверяю....
|
|||
51
Масянька
15.01.14
✎
11:46
|
(47) Не дошло:
Сообщить("ост = " + Окр(СуммаОстаткиТМЦ,5) + ", парт = " + Окр(СуммаПоПартиямТМЦ, 5)); вернуло: ост = 947211.85, парт = 947211.85 В чем косяк-то? |
|||
52
Wobland
15.01.14
✎
11:47
|
(51) сообщи ещё ост=пар
|
|||
53
Wobland
15.01.14
✎
11:47
|
(52) фу, Окр(СуммаОстаткиТМЦ,5) = Окр(СуммаПоПартиямТМЦ, 5)
|
|||
54
Масянька
15.01.14
✎
11:47
|
(49) Почему НЕ равны?
|
|||
55
m-serg74
15.01.14
✎
11:47
|
(54) (8)
|
|||
56
akaBrr
15.01.14
✎
11:48
|
(54) сравниваешь не округленные значения, а смотришь округленные
|
|||
57
Принт
15.01.14
✎
11:48
|
(49) я догадываюсь, но как это всё связано с текстом в (0)?
|
|||
58
Wobland
15.01.14
✎
11:49
|
(57) здесь в (0) особо никто не вникал
|
|||
59
Принт
15.01.14
✎
11:49
|
+(57) я и о других вещах догадываюсь
|
|||
60
Масянька
15.01.14
✎
11:49
|
(56) Сначала я и смотрела не округленные, и сравнивала.
Что не так-то? |
|||
61
m-serg74
15.01.14
✎
11:49
|
(57) ты про текст - "Доброе утро"?
|
|||
62
aka AMIGO
15.01.14
✎
11:50
|
(60) интересуюсь, почему ты не работаешь в отладчике? не любишь, что-ль?..
|
|||
63
Масянька
15.01.14
✎
11:51
|
Вы хотите меня убедить, что: чтобы сравнить 2 числа - их надо округлить?
(60) Не умею :( |
|||
64
Принт
15.01.14
✎
11:51
|
(60) (а - б) * 100000000
|
|||
65
Wobland
15.01.14
✎
11:51
|
(63) мы хотим тебя убедить, что ты имеешь два разных числа
|
|||
66
m-serg74
15.01.14
✎
11:51
|
(65) да она и сама убедилась просто не верит :)
|
|||
67
aka AMIGO
15.01.14
✎
11:52
|
(63) дык просто-ж там, детка..
|
|||
68
catena
15.01.14
✎
11:52
|
(60)А откуда взялись эти СуммаОстаткиТМЦ и СуммаПоПартиямТМЦ?
|
|||
69
Масянька
15.01.14
✎
11:52
|
(65) Ёлки-моталки!!!!!!!!!! Почему????????????
(67) Научи, а? Пожалуйста... |
|||
70
m-serg74
15.01.14
✎
11:52
|
F11 и в путь
|
|||
71
m-serg74
15.01.14
✎
11:53
|
F12
|
|||
72
Принт
15.01.14
✎
11:53
|
(68) о! соратник
|
|||
73
zak555
15.01.14
✎
11:53
|
(63) в компьютере два числа всего используются
|
|||
74
Privalov
15.01.14
✎
11:53
|
(69) Потому, что там не два знака..
|
|||
75
Wobland
15.01.14
✎
11:54
|
(69) так уж они устроены. я вот смотрю на чью-то спину, и мне остаётся только верить в красоту её обладательницы, о которой я не знаю ;)
|
|||
76
dedmoroz777
15.01.14
✎
11:55
|
(75) Так это ты на фото в её личке?
|
|||
77
aka AMIGO
15.01.14
✎
11:55
|
(69) счас попробую.. подготовлю скрины, выложу, потерпи чуток, ладушки?
|
|||
78
Wobland
15.01.14
✎
11:56
|
(76) я бы уж воспользовался моментом съёмки и подглянул ;)
|
|||
79
VladZ
15.01.14
✎
11:56
|
(69) Потому что программа хранит у себя в мозгах, допустим, 947211.84999999, а показывает тебе 947211.85. А второе число, допустим, 947211.85112321. Но программа тебе покажет 947211.85. Но на самом деле они не равны.
|
|||
80
Принт
15.01.14
✎
11:56
|
в clipper-е такого не было..
|
|||
81
Bigbro
15.01.14
✎
11:56
|
Если (а<>Окр(а,2)) ИЛИ (б<>Окр(б,2)) Тогда
Сообщить("Опаньки!"); КонецЕсли; |
|||
82
Масянька
15.01.14
✎
11:57
|
Ладно, пусть не 2 после запятой.
Почему выводит (без округления) всего 2? (80) Однозначно! |
|||
83
zak555
15.01.14
✎
11:57
|
(80) что это ?
|
|||
84
Масянька
15.01.14
✎
11:57
|
(75) А не красивой не стал бы помогать :(
|
|||
85
Bigbro
15.01.14
✎
11:57
|
(82) а вот на этот вопрос кроме разработчиков 1с вряд ли кто то ответит..
|
|||
86
Wobland
15.01.14
✎
11:57
|
(82) поэтому и растут волосы на руках у тех, кто сообщает
|
|||
87
VladZ
15.01.14
✎
11:58
|
(82) Нужно смотреть, откуда у тебя взялось это число. Может ты запросом получала (там одна точность), а потом в ТЗ выгружала (там другая точность).
|
|||
88
Масянька
15.01.14
✎
11:59
|
(85) Феерично :)
(87) Там довольно сложно: запрос, доп. расчеты, остатки.... Не выгружала. |
|||
89
Масянька
15.01.14
✎
12:00
|
Ладно, дядьки - СПАСИБО!
Всем чмоки :))) |
|||
90
ЧеловекДуши
15.01.14
✎
12:02
|
(88) Запрос покажи :)
|
|||
91
Масянька
15.01.14
✎
12:02
|
(77) А скрины - жду...
|
|||
92
zak555
15.01.14
✎
12:07
|
за свою жизнь лично видел только одну девушку, которую можно назвать программист
|
|||
93
ЧеловекДуши
15.01.14
✎
12:11
|
(92) Ну и как она тебе?
|
|||
94
zak555
15.01.14
✎
12:12
|
(93) так же был удивлён, что ум и красота на месте
|
|||
95
Масянька
15.01.14
✎
12:13
|
(77) Так ждать?
|
|||
96
aka AMIGO
15.01.14
✎
12:13
|
(89) для начала - в конфигураторе ставишь курсор приблизительно туда, где интересное место в коде
далее - нажимаешь на иконку внизу: http://gyazo.com/17067361f6190f60232231cc7dbd0f81 попадаешь в отладчик, курсор стоит на нужном тебе месте. далее жмакаешь 2 раза на желтой вертикальной полоске напротив строки, где тебе надо остановить выполнение: http://gyazo.com/bb4fa1d650782f11e6bd59d88109c2ea дальше - открываешь табло, жмакнув на иконке вверху: http://gyazo.com/0c794fb477f98c07902cd07d63b73073 в окне табло печатаешь имя переменной, или копипастишь его из окна кода: http://gyazo.com/4ae07e302d918eb371d0ecda3be6841f |
|||
97
aka AMIGO
15.01.14
✎
12:13
|
(95) торопишь меня :) жди :)
|
|||
98
Масянька
15.01.14
✎
12:14
|
(97) Окей! Прости :)
PS Люблю. Жду. Лена (С) |
|||
99
dedmoroz777
15.01.14
✎
12:19
|
(98) Не мешай! Все ждут)
|
|||
100
Масянька
15.01.14
✎
12:19
|
Мне?
|
|||
101
1dvd
15.01.14
✎
12:23
|
Я не понял. Она стукнулась или нет?
|
|||
102
Simod
15.01.14
✎
12:24
|
Сообщить(?(Цел(СуммаОстаткиТМЦ*100)/100 = СуммаОстаткиТМЦ, "Равно", "Не равно"));
Сообщить(?(Цел(СуммаПоПартиямТМЦ*100)/100 = СуммаПоПартиямТМЦ, "Равно", "Не равно")); |
|||
103
aka AMIGO
15.01.14
✎
12:25
|
+96 идешь в 1С-Предприятие, вызываешь на выполнение свой отчет:
http://gyazo.com/7fb44e92d8654d683b06613a02c237b1 автоматом попадаешь в отладчик, в котором видно каретку, - останов в указанной тобой точке: http://gyazo.com/b6764eef8e8a0e762699879c97c9d428 а в табло видишь значения переменных, как раз на момент в точке останова.. итого - выбирай место останова, ставь точку останова, запускай программку, наслаждайся результатами :) Для управления выполненим программы - иконки на верхней границе окна отладчика Для продолжения по шагам - нажимай иконку: http://gyazo.com/c19881be73ea1143b6e9349d7bd0919e Для завершения - одну из двух: http://gyazo.com/6c08a6ec9c035aee172f92be4c353574 вроде всё :) успеха! :) |
|||
104
aka AMIGO
15.01.14
✎
12:26
|
(101) "не дождетесь!" © :)
|
|||
105
Масянька
15.01.14
✎
12:28
|
(103) Огромное СПАСИБО! Персональные чмоки :)))))))))
Щас в ворд сложу, картинки вставлю. Короче, кому надо потом будет - говорите. Автор - aka AMIGO, редактор - я :)))) |
|||
106
Torquader
15.01.14
✎
12:34
|
Кстати, для тех, кто хочет понять - в чём дело.
1С к точности дробной части относится очень "сурово" // проверка точности 1С A=1; B=1; I=1; Пока 1=1 Цикл C=A+B; Если C=A Тогда Сообщить("Обнаружена точность:B="+Строка(B)); Прервать; КонецЕсли; Если I>1000 Тогда Сообщить("Превысили допустмый предел:С="+Строка(C)+",A="+Строка(A)); Прервать; КонецЕсли; B=B*0.1; I=I+1; КонецЦикла; Выводит: Превысили допустмый предел:С=1,A=1 То есть система может отслеживать 1000 знаков ? |
|||
107
aka AMIGO
15.01.14
✎
12:36
|
(105) пожалуйста :)
кстати, в табло можно помещать и функции/операторы, чтобы увидеть из результаты: http://gyazo.com/9c83b3f3e8adb9e4adf826896aad26d6 |
|||
108
Масянька
15.01.14
✎
12:39
|
(106) За все время - впервые с таким столкнулась. Предупреждать надо :(
|
|||
109
Torquader
15.01.14
✎
12:40
|
(106) Хотя, в некоторых операциях 1С "ошибается":
A=2; B=3; C=A/B; D=C*10000000000000000000000000000000000000000000000000; Сообщить("D="+Строка(D)); Получаем: D=6666666666666666666666666660000000000000000000000 То есть точность 27 знаков. |
|||
110
Сисой
15.01.14
✎
12:40
|
(0) В Такси! Только в такси!
|
|||
111
Torquader
15.01.14
✎
12:41
|
(108) Вообще, не знаю как в 1С, но в других системах, если мне нужна точность, то я считают в целых числах, смещённых до нужной точности - тогда гарантированно два числа будут совпадать, если они и на выводе совпали.
|
|||
112
Torquader
15.01.14
✎
12:41
|
(110) Думаешь, что там движок вычислений сильно переписали ?
|
|||
113
Масянька
15.01.14
✎
12:42
|
(111) Об том и речь - я получила числа, ничего с ними не делала, пытаюсь сравнить. Даже на экран вывела :(
|
|||
114
zak555
15.01.14
✎
12:44
|
(110) это ответственная работа
|
|||
115
1dvd
15.01.14
✎
12:45
|
Если женщина по определению не может быть программистом, думаете, она может быть таксистом?
|
|||
116
catena
15.01.14
✎
12:46
|
(113), как это ничего не делала, когда (88)?
|
|||
117
aka AMIGO
15.01.14
✎
12:48
|
забавна работа оператора Окр() с точностью до 2-х знаков после запятой:
http://gyazo.com/7437221f177fc103545cbdf270bfbbbd |
|||
118
Torquader
15.01.14
✎
12:49
|
(115) Да быть можем всем, чем угодно, только вот хорошим программистом, как и хорошим таксистом - вряд ли - да и среди мужчин хороших программистов тоже не очень много.
|
|||
119
aka AMIGO
15.01.14
✎
12:49
|
+117 вроде бы должны быть равны, ан нет! :)
|
|||
120
Torquader
15.01.14
✎
12:50
|
(117) Нет, а что ты хотел - это же округление, а не отбрасывание дробной части.
Там же ещё параметр есть, как округлять 1.5 в 2 или в 1. |
|||
121
Bigbro
15.01.14
✎
12:51
|
117 с чего бы они должны быть равны?
|
|||
122
Torquader
15.01.14
✎
12:51
|
(119) Меня больше 106 поразило - проверка точности алгоритма, знакомая со времён ассемблера, показала, что в 1С про ассемблер и сопроцессор не слышали.
|
|||
123
Torquader
15.01.14
✎
12:52
|
(121) С точки зрения программиста 1С, видимо.
|
|||
124
aka AMIGO
15.01.14
✎
12:53
|
(118) я встретил двух женщин-программисток, обе были программистки искрой божьей ..
работали мы в ВЦ, на ЕС-1020, делали огромадные расчеты, девушки справлялись запросто. (121) в принципе принимается значение, установленное в окне свойств конфигурации. У меня - типовые настройки (123) кхм.. :) |
|||
125
aka AMIGO
15.01.14
✎
12:54
|
(120) точно, друже :)
|
|||
126
Масянька
15.01.14
✎
12:57
|
Да о чем вы? :))))
Меня в ступор просто вогнало: получила число, вывела на экран - а это не то число... |
|||
127
CaMoJleT
15.01.14
✎
12:58
|
(126) Удивительное рядом :)
|
|||
128
aka AMIGO
15.01.14
✎
13:00
|
(122) да слышали они, конечно..
однозначно сталкивались в Си с точностью и двойной точностью числовых переменных это и есть ограничение, следствие которого видно как раз в (109) |
|||
129
aka AMIGO
15.01.14
✎
13:02
|
+128 я уже не помню, увы, порядок двойной точности.. восьмеричный код там
|
|||
130
Torquader
15.01.14
✎
13:10
|
(126) Это вы с числами double не работали - я, например, в научной работе их "сравнивал" побайтово - тогда действительно была гарантия, что числа совпадают только тогда, когда их представления совпадают.
А вывод на экран - он никогда правильно не работает. |
|||
131
Принт
15.01.14
✎
13:12
|
(130) и то, есть вероятность натолкнуться на +0/-0 )
|
|||
132
Torquader
15.01.14
✎
13:13
|
(128) В (109) Показано, что результат операции деления просто получают из сопроцесссора, у которого точность где-то 17-18 знаков в дробной части.
А вот сложение, видимо, они отработали, как умели. |
|||
133
Torquader
15.01.14
✎
13:14
|
(131) С точки зрения математики - это два разных числа, так что не страшно.
|
|||
134
aka AMIGO
15.01.14
✎
13:15
|
(132) или "как смогли" :)
|
|||
135
Принт
15.01.14
✎
13:15
|
(133) впервые слышу
|
|||
136
Bigbro
15.01.14
✎
13:19
|
(126) у Козьмы Пруткова в практике помнится был аналогичный случай .. ))
|
|||
137
Масянька
15.01.14
✎
13:20
|
Итак, в отладчике показывает
СуммаОстаткиТМЦ = 947228.01 СуммаПоПартиямТМЦ = 947228.01 И что же я должна думать? |
|||
138
Wobland
15.01.14
✎
13:22
|
(137) перенеси остатки в БП 3.0 и там посчитай
|
|||
139
Масянька
15.01.14
✎
13:22
|
Кстати, остановка стоит тут - Если Окр(СуммаОстаткиТМЦ,2) = Окр(СуммаПоПартиямТМЦ,2) Тогда
А выводит то, что реально или округленное? |
|||
140
Torquader
15.01.14
✎
13:22
|
(137) Если тебе хочется, чтобы числа сравнивались, как на экране (что, для некоторых людей вполне логично), то пиши просто: Если Строка(СуммаОстаткиТМЦ)=Строка(СуммаПоПартиямТМЦ)Тогда
Конечно, математики за такое яйца оторвут, но вам это не грозит. |
|||
141
Принт
15.01.14
✎
13:22
|
(137) 1С - 3,1421-ы
|
|||
142
Torquader
15.01.14
✎
13:23
|
(135) При рассмотрении пределов важно +0 или -0.
И при точном сравнении, если А>B, то A-B не может быть -0. |
|||
143
Масянька
15.01.14
✎
13:24
|
(140) Мне надо правильно :(
(141) Пушистая северная лисичка :( |
|||
144
Bigbro
15.01.14
✎
13:24
|
выводит то что в отладчике запрошено. можно любые формулы ввести в табло в том числе с округлениями.
|
|||
145
Масянька
15.01.14
✎
13:25
|
(144) В табло забила:
СуммаОстаткиТМЦ СуммаПоПартиямТМЦ |
|||
146
Simod
15.01.14
✎
13:26
|
(137) Перезагрузись.
Код из (102) проверяла? |
|||
147
Bigbro
15.01.14
✎
13:32
|
хотя с другой стороны отладчик писали те же люди из 1с ... ))
|
|||
148
alexiv79
15.01.14
✎
13:35
|
(145) Попробуй каждое число умножить допустим на 100 000 и сравнить
|
|||
149
alexiv79
15.01.14
✎
13:36
|
+(148) СуммаОстаткиТМЦ и СуммаПоПартиямТМЦ - это реквизиты или переменные?
|
|||
150
Масянька
15.01.14
✎
13:37
|
(149) Уже переменные.
|
|||
151
Принт
15.01.14
✎
13:38
|
(142) тогда почему операция сравнения в сопроцессоре говорит -0 == +0? )
|
|||
153
ЧеловекДуши
15.01.14
✎
13:38
|
(150) Уже, в какой именно момент наступило? :)
Покажи весь код :) Лучше выложи обработку на файло помойку... |
|||
154
aka AMIGO
15.01.14
✎
13:39
|
(139) - в окне сообщений - округленные, а в отладчике - реальные
|
|||
155
Torquader
15.01.14
✎
14:13
|
(151) С точки зрения работы сопроцессора - да - это нули.
С точки зрения стандарта представления чисел - это разные записи. P.S. там ещё и не число есть, если кому интересно. |
|||
156
Torquader
15.01.14
✎
14:21
|
(150) Вот тебе функция, которая показывает, что внутри числа:
Функция ВывестиЧислоКакЕсть(пчЧислоДляВывода) лчЦелаяЧасть=Окр(пчЧислоДляВывода,0,1); Если лчЦелаяЧасть>пчЧислоДляВывода Тогда лчЦелаяЧасть=лчЦелаяЧасть-1;КонецЕсли; лстрСтрокаЧисла=Строка(лчЦелаяЧасть)+"."; лчДробнаяЧасть=пчЧислоДляВывода-лчЦелаяЧасть; Пока лчДробнаяЧасть<>0 Цикл лчДробнаяЧасть=лчДробнаяЧасть*10; лчЦелаяЧасть=Окр(лчДробнаяЧасть,0,1); Если лчЦелаяЧасть>лчДробнаяЧасть Тогда лчЦелаяЧасть=лчЦелаяЧасть-1;КонецЕсли; лстрСтрокаЧисла=лстрСтрокаЧисла+Строка(лчЦелаяЧасть); лчДробнаяЧасть=лчДробнаяЧасть-лчЦелаяЧасть; КонецЦикла; Возврат лстрСтрокаЧисла; КонецФункции Попробуй вывести свои две переменные через неё - увидишь что-то интересное. |
|||
157
Принт
15.01.14
✎
14:23
|
(155) поднял http://ru.math.wikia.com/wiki/Отрицательный_и_положительный_ноль
+ https://ru.wikipedia.org/wiki/Отрицательный_и_положительный_ноль с этой точки зрения -0, +0, 0 - различные, не смешиваемые в одной куче сущности |
|||
158
alexiv79
15.01.14
✎
14:27
|
(150) Могу ошибаться, но по-моему тема такая - в реквизите ставишь формат 15.2. Он подставляет реальное число в реквизит - допустим 15.078000, но показывать будет все равно 15.08
|
|||
159
Torquader
15.01.14
✎
14:32
|
(158) После того, как "реальное" число было присвоено реквизиту с точностью 15.2, в нём будет лежать число с точностью 15.2 вне зависимости от того, что в него положили.
С ячейками таблицы значений, для которых задан тип и точность, происходит тоже самое. |
|||
160
Torquader
15.01.14
✎
14:35
|
(157) Меня больше удивило, что (156) показало сто нулей после запятой и одну единицу в моём примере из (106), правда я I уменьшил до ста.
Вывод - на 1С можно делать математические расчёты ничего не зная про проблемы вычислений с плавающей точкой на компьютерах (в отличие от Excel, которая в трёх знаках уже врёт). |
|||
161
Масянька
15.01.14
✎
14:35
|
(156) Спасибо - попробую.
(158) Переменные (в модуле обработки). Формат на них не накладывался. Кстати, попробовала (102): СуммаОстаткиТМЦ - не равно, СуммаПоПартиямТМЦ - равно. |
|||
162
alexiv79
15.01.14
✎
14:35
|
(159) Понятно - ну так значит так. Вот только вопрос - если это реквизиты - почему сумма не сходится? Если в сообщении выводится "ост = 947211.85, парт = 947211.85"
|
|||
163
Принт
15.01.14
✎
14:37
|
(160) меня удивляет, почему они при этом заставляют работать с дробями как на сопре
|
|||
164
Масянька
15.01.14
✎
14:39
|
(156) Вот что вернуло:
остатки = 947211.849999999999999999999999997999994279 партии = 947211.85 |
|||
165
Масянька
15.01.14
✎
14:40
|
+(164) Но в отладчике - другие цифры (гы-гы-гы).
По-моему, как раз в (156) и есть нормальный отладчик (для данной ситуации). СПАСИБО!!!!!!!!! |
|||
166
Масянька
15.01.14
✎
14:47
|
(156) Вот это - настоящий инженер!
PS На первом курсе универа: по вышке были какие-то расчеты по таблицам Брадисам. Не получается и все тут. Иду к соседу. А он еще не начал это задание делать. А к нему приехал старший брат (2 года назад окончил наш универ по ТММ). Брат - лежит в постели, читает какую-то книжку. Брат говорит: "Давай сюда свое задание." Читает, думает около 2 минут и выдает ответ. Я ошалело говорю соседу: "Вот это - настоящий инженер!". |
|||
167
Torquader
15.01.14
✎
14:58
|
(166) Ладно - вы с восьмёркой познакомитесь - будете вывод числа в строку переписывать, чтобы без пробелов было.
Потому как ЧРГ=;нифига не отключает, хотя, вроде бы ЧГ=0; помогает. |
|||
168
Масянька
15.01.14
✎
15:19
|
(167) Пройденный этап :) Но я снеговика не люблю....
|
|||
169
ЧеловекДуши
15.01.14
✎
15:21
|
(167) В 8-ке свои грабли :)
|
|||
170
ЧеловекДуши
15.01.14
✎
15:21
|
(164) Ну вот, опять чудо не получилось :)
|
|||
171
Torquader
16.01.14
✎
11:22
|
Кстати, не стоит пробовать вывести через (156) отрицательные числа - для способных предлагается доработать функцию под вывод отрицательных чисел.
|
|||
172
Масянька
16.01.14
✎
12:29
|
Ну, раз вы не унимаетесь: мне все-таки очень интересно - где хранится реальное число?
Сообщить, в том числе и преобразованное в строку, отладчик - выводят всего 2 цифры. А сравнивает - реальное число. Где оно лежит?! |
|||
173
VladZ
16.01.14
✎
14:46
|
(172) Не поверишь - в памяти! :)
|
|||
174
Torquader
16.01.14
✎
14:51
|
(172) Причём, похоже, что в целом виде с отдельным указанием порядка - скорость работы с такими числами возрастает пропорционально их длине - это я вчера проверял.
Так что, в этом случае, 1С заслуживает уважения - потери точности практически не происходит. |
|||
175
Принт
16.01.14
✎
14:55
|
||||
176
Масянька
16.01.14
✎
15:00
|
(173) Ага - не поверю :))))
ИМХО, это и есть моветон: пользователь может увидеть только 2 цифры после запятой, а реально сравнивается 20 цифр после запятой. (174) Ну, да. Сколько лет работаю - впервые наступила на эти грабли. И не один раз сравнивала суммы. |
|||
177
Пятничник
16.01.14
✎
16:41
|
(80) (83) вот и выросло поколение одинэсников, которые не знают, что такое clipper... :-)
|
|||
178
aka AMIGO
16.01.14
✎
16:49
|
(177) да просто за ненадобностью :)
|
|||
180
Пятничник
16.01.14
✎
16:58
|
(172) правильный вопрос - не ГДЕ оно хранится, а КАК.
В Клиппере (и ДБФ) были указатели точности хранения (количество десятичных знаков). в 1С решили обойтись без них (хотя вроде в 8.3 экспериментируют с ними). (176) если б у вас только сумма и произведение были - было бы легче, но если хотя бы 1 раз возникает деление - точность результата не столь очевидна. |
|||
181
Torquader
16.01.14
✎
21:05
|
(180) Одно дело - в базе данных - там точность чисел ограничена, а в памяти - каждый может хранить всё, что хочет.
Стандартная ситуация - умножение на количество и деление на другое количество - и чаще всего - ошибка округления. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |