Имя: Пароль:
1C
1С v8
как убрать округление в дробном числе
, ,
0 bug16
 
30.01.14
17:55
вообщем с 8кой пока на "ВЫ".
Имеется регистр сведений с ресурсом Z1 типа число. Число длинной 14, точностью 8.

Допустим делаю такую запись Регистр.Z1=Массив.z1;
Где Массив.Z1 = 99,999999999999999999999999895
и в итоге Регистр.Z1 будет равен 100, а мне конкретно надо чтобы Регистр.Z1=99,999999999

то есть как бы срабатывает округление, а хочется чтобы было просто обрезание дробной части... Наверное надо конкретно Массив.Z1 как то обрезать... Подскажите в какую сторону смотреть? ))
1 Ndochp
 
30.01.14
17:56
половину предпоследнего разряда вычти безусловно.
2 Ndochp
 
30.01.14
17:57
ТОчнее не предпоследнего, а последнего+1
3 ДенисЧ
 
30.01.14
17:58
Регистр.Z1=Цел(Массив.z1 * 1000000000)/1000000000
4 Wobland
 
30.01.14
17:58
а что, правда 100.0 будет при такой точности?
5 bug16
 
30.01.14
18:00
типа так Окр(Массив.U-0.000000005,8,0)
6 bug16
 
30.01.14
18:00
(4) ага..... ((
7 Euguln
 
30.01.14
18:00
(4) По крайней мере Окр(99,999999999999999999999999895, 2) = 100
8 Ndochp
 
30.01.14
18:02
(6) Регистр.Z1=Массив.z1-0,000 000 005;
9 bug16
 
30.01.14
18:07
(8) Благодарю за наводку ;)
10 bug16
 
30.01.14
19:33
хм... а теперь другой вариант получается, если Массив.z1=99,000000000000000000000000
тогда Регистр.Z1=Массив.z1-0.000000005=99,00000001

тоже не правильно получается ((
11 m-serg74
 
30.01.14
19:36
(10) через Если не катит?
12 NcSteel
 
30.01.14
19:36
(10) Сделай правильно.
13 hhhh
 
30.01.14
19:57
(10) не 0 05 а 000049
14 Prince-Sentido
 
30.01.14
20:12
Вечер добрый!

Результат = ЭлементыФормы.Число.Значение;
    ЗначениеОкругления = ЭлементыФормы.Округлять.Значение;
    
    ЦелаяЧасть = Результат - Число("0,"+Прав(Результат,СтрДлина(Результат)-Найти(Результат, ",")));
    ДробнаяЧасть = Число("0,"+Прав(Результат,СтрДлина(Результат)-Найти(Результат, ",")));
    Результат = Число(Лев(ДробнаяЧасть,ЗначениеОкругления+2)) + ЦелаяЧасть;
    Сообщить(Результат);
15 Ненавижу 1С
 
гуру
30.01.14
20:16
(14) это стёб?
16 Ненавижу 1С
 
гуру
30.01.14
20:16
ответ был в (3)
17 Prince-Sentido
 
30.01.14
20:20
(16) просмотрел, извиняюсь
18 Ndochp
 
31.01.14
09:27
(10) Ты в консоли проверял?

99,000000000000000000000000
-0.000000005=
98.999999995~
99.00000000

откуда ты единичку на конце берешь я ХЗ
19 vhl
 
31.01.14
10:51
(17) Создай тему@читай через строчку. Девиз мисты
20 catena
 
31.01.14
10:52
Интересно, 0.9 ближе к 1 или к 0?
21 Wobland
 
31.01.14
10:54
(20) к 0.91
22 Ndochp
 
31.01.14
10:55
(20) It depends.
Если у тебя 900 рублей, а товар стоит 1000, то ты ближе к тому чтобы купить его или нет?
23 catena
 
31.01.14
10:56
(21)Мы ж идем в сторону уменьшения разрядности.

Еще к размышлению, между числами 0.(9) и 1 не найдется ни одного числа. Никакого. Ваще. Значит по определению они равны.
24 catena
 
31.01.14
10:57
(22)Это другая задача :)
25 Wobland
 
31.01.14
10:58
(23) если ты сумела определить 0.(9) и 1, значит, они не равны

бармен, ещё кружечку!
26 Зойч
 
31.01.14
10:58
(22) если ты в египте, то ты его купишь однозначно и еще останется
27 Ndochp
 
31.01.14
10:58
9 в периоде да, равны именно по определению. Но с такой разрядностью считать компы не умеют. А вот все недопериодные девятки единице могут быть равны только из физических условий задачи.
28 Ndochp
 
31.01.14
11:00
(25) Читайте математику, числа вводятся как ряды и для 0,(9) и 1 они совпадают. На пальцах не расскажу, институт был давно.
29 Wobland
 
31.01.14
11:03
(28) тоже давно было. но интуитивно имхается мне, множество чисел, где 0.(9)=1, несколько не вещественно
30 Ненавижу 1С
 
гуру
31.01.14
11:07
(29) вы просто поверьте, а поймете потом (с) Чайф
31 Wobland
 
31.01.14
11:08
(28) (30) а скажите ключевое слово для почитать на досуге, плз
32 Ndochp
 
31.01.14
11:08
(28)Не, освежил - как раз вещественные.
wiki:Вещественное_число#.D0.9D.D0.B0.D0.B8.D0.B2.D0.BD.D0.B0.D1.8F_.D1.82.D0.B5.D0.BE.D1.80.D0.B8.D1.8F_.D0.B2.D0.B5.D1.89.D0.B5.D1.81.D1.82.D0.B2.D0.B5.D0.BD.D0.BD.D1.8B.D1.85_.D1.87.D0.B8.D1.81.D0.B5.D0.BB
"Два вещественных числа

\alpha = [a_n] и \beta = [b_n],

определённые соответственно фундаментальными последовательностями \{a_n\} и \{b_n\}, называются равными, если
\lim_{n \to \infty} \left ( a_n - b_n\right ) = 0
"
То есть, 0,(9) и 1 задаются рядами
0,9 0,99 0,999 ... и
1 1 1 1 1
соответственно. Разность их членов стемится к нулю, значит числа равны.
33 Ненавижу 1С
 
гуру
31.01.14
11:09
(31) 0.(9) = 3 * 0.(3) = 3 * (1/3) = 1

wiki:0,(9)
34 Ненавижу 1С
 
гуру
31.01.14
11:09
+(33) кривая ссылка, в википедии набери строку "0,(9)"
35 supremum
 
31.01.14
11:12
Тут есть тонкость.

0.9(9)=1 - это по определению

, но
предел суммы дробей - да, равен единице.
36 Ndochp
 
31.01.14
11:13
(35) Там не предел суммы. Там предел разности дальних членов фундаментальной последовательности.
37 supremum
 
31.01.14
11:15
(36) Монопеносуально.
38 Ndochp
 
31.01.14
11:23
(35) Кстати, откуда у тебя "но" взялось? ли ты очепятался, или там И должно стоять.
а то фраза "то-то равно единице, но то-то2 равно единице" не звучит. Противопоставления то нету.
39 catena
 
31.01.14
11:24
(29)Это было одним из первых убийственных открытий на мехмате. После школы просто мир перевернулся. Так же, как и понимание того, что рациональных чисел больше, чем натуральных, хотя и тех и тех бесконечно много. А вещественных еще больше.
40 Ndochp
 
31.01.14
11:24
+(38) Не понятно, в чем тонкость.
41 Ndochp
 
31.01.14
11:25
(39) Рациональных же вроде столько же, сколько целых и натуральных, не?
42 supremum
 
31.01.14
11:26
(40) Это равенство не доказывается, а определяется, доказывается предел.
(41) Смотря как считать.
43 catena
 
31.01.14
11:30
(41)В множестве вещественных чисел, множество рациональных плотно, а натуральных нет.
44 Ненавижу 1С
 
гуру
31.01.14
11:36
(41) в определенном смысле да
45 Ndochp
 
31.01.14
12:51
(42) Оно доказывается, см (32)
46 Ndochp
 
31.01.14
12:57
(43) Чтобы оценить количество рациональных чисел, нужно найти мощность их множества. Легко доказать, что множество рациональных чисел счётно. (с) вика.
А плотность это ни о чем. Есть более чем счетные множества, которые при этом не плотны.
http://dic.academic.ru/dic.nsf/bse/93134/Кантора
47 Torquader
 
31.01.14
13:33
Не, ребята, это всё хорошо, но округление отбрасыванием - это неверно.
Тогда для вас всегда допустимо, что 2=1.999999

Лучше округлять математически, а если остаются ошибки округления - потом их разносить по строкам, чтобы было наиболее похоже на правду.
48 supremum
 
31.01.14
13:42
(46) Тут такая штука: на любом числовом отрезке длиной более нуля рациональных чисел больше чем целых.

С другой стороны да, есть взаимнооднозначное соответствие между между рациональными и целыми числами.
49 bug16
 
31.01.14
19:41
корявенько, но сделал как то так..
Если Массив.U1<0 тогда
                    Если НЕ (-Числ1=Цел(Массив.U1)) тогда
                        Регистр.U1= -Числ1-0.99999999;
                    Иначе
                        Регистр.U1=Массив.u1;
                    КонецЕсли;
                ИначеЕсли Массив.U1>0 тогда
                    Если НЕ (Числ1=Цел(Массив.U1)) тогда
                        Регистр.U1= Числ1+0.99999999;
                    Иначе
                        Регистр.U1=Массив.u1;
                    КонецЕсли;                      
                КонецЕсли;
50 DS
 
31.01.14
20:17
(49) Так и не понял, чем (3) не понравилось. Или оплата посимвольная?
51 supremum
 
31.01.14
21:24
Просмотрел...

(45) Нет, это не так.
52 supremum
 
31.01.14
21:33
+(51) Вообще, элементарно доказывается, что 0,9(9)<>1

(32) Не значит!
53 bug16
 
01.02.14
10:02
(50) вариант из (3) тоже не правильно отрабатывал...
54 Ndochp
 
03.02.14
11:15
(52) Нука?
И что не значит? берем определение вещественного числа по Кантору (ссылка приведена в (32)).
Последовательность 1 1 1 1 ... фундаментальна по условию Коши
Последовательность 0,9 0,99 0,999 ... фундаментальна по условию Коши
Предел 1-0,999...9 равен 0 при росте числа девяток.

По определению "Два вещественных числа ... определённые соответственно фундаментальными последовательностями, называются равными, если \lim_{n \to \infty}( a_n-b_n) = 0"
Значит 1 = 0,9(9).

Другое дело, что если брать определение по Веерштрассу, то там да, практически по определению.
55 supremum
 
03.02.14
13:36
(54) Не вижу противоречия с (35)

1) Любой элемент этой последовательности принадлежат открытому интервалу: (0,1) - видно, что единица этому интервалу не принадлежит и ни один член последовательности этой единицы не достигает.

2) С другой стороны мы знаем точную верхнюю грань этой последовательности, знаем, что эта последовательность стремится к единице и вполне логично определить равенство, как равенство пределов (либо равенство предела разности нулю). Но это именно равенство пределов. Тут мы подходим к определению равенства через пределы фундаментальных последовательностей.

Тут по сути интервал как бы замыкается с одной стороны. Но я не стал бы ставить равенства между границей множества и замыканием, все же разные понятия.
56 Ndochp
 
05.02.14
18:41
(55)
а) А я про 35 и не писал. Я про (52) уже.
б) первое утверждение из (55) - не верно. Так как 0,(9) = 1 по определению вещественных чисел "по Веерштрассу" (через бесконечные десятичные дроби), или это же доказывается через фундаментальные последовательности, что есть ОПРЕДЕЛЕНИЕ равенства вещественных чисел "по Кантору".
Так что куда ни кинь, а  0,(9)=1. Нам вообще говоря не важно, где болтаются члены фундаментальной последовательности. Пусть хоть до n=10^10 они равны n^n, а потом 1, все равно последовательность фундаментальна, и число, которое она представляет есть именно ее предел.
57 supremum
 
06.02.14
09:16
(56)

1) Почему не верно?

пусть a_n=1-10^(-n) и N - целые больше нуля

Для всех n в N a_n<1 - строгое неравенство

2) 0.(9)=1 - всего лишь другая запись lim a_n=lim b_m
n, m стремятся к бесконечности, но не достигают ее.
b_m=1 , m в N

3) Без разницы, как определять a_n: как сумму ряда или как числовую последовательность

4) Вейерштрасс

5) Мне больше нравятся Дедекиндовы сечения.
58 Ndochp
 
06.02.14
10:03
(57)Так вещественное число это и есть lim a_n по сути, а не какой-то там член последовательности. Значит 0,(9) = 1
59 supremum
 
06.02.14
11:52
(58)
Тогда зачем такая запись? Вот тут и появляется недостаток такой записи. Она дает способ построения числа, а по построению все просто см. (51) п. 1. Возникает иллюзия, что последовательность достигает единицы, что не так.

По мне лучше символ "0.9(9)" объявить другой записью единицы. Все, без "доказательств". Да вроде так и делается сейчас.

Похоже тема давно себя исчерпала )
Закон Брукера: Даже маленькая практика стоит большой теории.