Новости:

Из правил форума: Тема должна отражать суть вопроса, топики типа "help please" будут удаляться!

Главное меню

дробную часть выразить целым числом

Автор 0mega, 13.02.2013, 19:52

« назад - далее »

0mega

Доброго времени суток

А1=11,6
В1=2
Надо просуммировать и вывести целую и дробную части в  виде целых чисел
=--ПОДСТАВИТЬ((A1+B1-D1);"0,";"")
здесь D1- целое от сумм(А1+В1)
ответ = 6
Все правильно. Если А1 заменить на большое число (напр 1991,6) то машина выдает экспоненту с 14 знаками ?!
P.S.
Вопрос решен другим способом, Интересует именно этот вариант


Serge 007

Вопрос не совсем понял, но целые части можно сложить и вывести в виде целых чисел так:
=СУММПРОИЗВ(ЦЕЛОЕ(A1:B1))
а дробные так:
=ОКРУГЛ(СУММПРОИЗВ(A1:B1-ЦЕЛОЕ(A1:B1))/0,1;)
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

iron priest

в Д =--ЕСЛИ(ЕОШИБКА(ЛЕВСИМВ(СУММ(A3:B3);ПОИСК(".";СУММ(A3:B3);1)-1));СУММ(A3:B3);ЛЕВСИМВ(СУММ(A3:B3);ПОИСК(".";СУММ(A3:B3);1)-1))

в Е =СУММ(A3:B3)-D3

0mega

#3
Сергей, Дмитрий
Спасибо за ответы

Цитата: 0mega от 13.02.2013, 19:52
Вопрос решен другим способом, Интересует именно этот вариант

Если 2 (!) таких видных туза не поняли вопрос  - значит недостаточно грамотно сформулировал.
Попробуем еще раз с подробным пояснением.

если 11,6+2 =13,6
целая часть определяется
=ЦЕЛОЕ(A1+B1)
дробная часть:
--ПОДСТАВИТЬ((A1+B1-E1);"0,";"")
подставляем значения
--ПОДСТАВИТЬ((11,6+2-13);"0,";"")
Значение в скобках = 0,6
функция ПОДСТАВИТЬ убирает 0,
остается только значение после разделителя т.е. 6
Ответ правильный
НО !
Если A1 заменить 9897, тогда ответ 6E+14

Еще раз спасибо за предоставленные формулы
Моя соображалка родила это
=ВЫБОР((A3+B3=E3)+1;--ПСТР(A3+B3;ПОИСК(",";A3+B3)+1;99);0)

Меня интересует почему в первой формуле меняется ответ ?




Serge 007

=--ПОДСТАВИТЬ(ОКРУГЛТ((A11+B11-D11);0,001);"0,";"")
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Wasilic

Или так. Сергей опередил. :)
=--ПОДСТАВИТЬ((ОКРУГЛ((A3+B3-D3);2));"0,";"")
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Михаил С.

Цитата: 0mega от 13.02.2013, 21:27Меня интересует почему в первой формуле меняется ответ ?
Потому, что компьютер работает в двоичной системе исчисления.
Эта тема рассматривалась много раз.
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

ikki

Цитата: 0mega от 13.02.2013, 21:27Меня интересует почему в первой формуле меняется ответ ?
достаточно один раз пошагово вычислить.
и убедиться. что перед отбрасыванием нуля у вас результат 0,670000000000073.
можно еще выбрать формат ячейки для E11 вместо общего числовой и - опять же - убедиться.
:)

пс. возможно, устроит такая модификация:
=--ПОДСТАВИТЬ(ОКРУГЛ(A11+B11-D11;5);"0,";"")
можно поиграться - вместо 5 поставить другое число в пределах разумного.

0mega

Цитата: 0mega от 13.02.2013, 21:27
Сергей, Дмитрий
Спасибо за ответы
Не знаю угадал ли я с именем , но с nick-ом я точно ошибся .
У Еxcel-еведов на слуху The Prist 


0mega

Цитата: ikki от 14.02.2013, 03:01

достаточно один раз пошагово вычислить.
и убедиться. что перед отбрасыванием нуля у вас результат 0,670000000000073.

Все числа вводятся с клавиатуры. Нет ни одного вычисляемого значения. Вводимые значения ограничиваются двумя знаками после разделителя. Где и откуда взялось 15значное число ?
пошаговое вычисление:
9897,6+2=9899,6
Где и откуда взялось 15значное число после разделителя?

Serge 007

Если в Excel ввести такую формулу:
=1-0,55-0,45+0
то результатом её работы будет вовсе не ноль, а  -0,000000000000000055511151231258
Аналогично формула:
=(0,8-(0,7+0,1))*10^10 тоже вернёт не ноль, а 0,00000111022302462516
Объясняется это особенностями стандарта IEEE 754, в котором работает Excel

Проблемой сохранения чисел с плавающей точкой в двоичном формате является то, что некоторые числа, являющиеся конечными неповторяющимися числами в десятичной системе, становятся бесконечными повторяющимися числами в двоичной системе. Самым распространенным примером является число 0,1 и аналогичные. Хотя эти числа могут быть просто представлены в десятичном формате, при сохранении этого числа в мантиссе в двоичном формате оно становится следующим периодическим двоичным числом:
000110011001100110011 (и т.д.)
В спецификации IEEE 754 отсутствуют какие-либо условия для конкретных чисел; в мантиссе сохраняется все, что можно сохранить, а остальное отсекается. При сохранении это приводит к ошибке около -2,8E-17 или 0,000000000000000028.

Даже распространенные десятичные дроби, например, 0,0001, не могут быть точно представлены в двоичном формате. (0,0001 — это периодическая двоичная дробь с периодом 104 бита). Это сходно с тем, что дробь 1/3 не может быть точно представлена в десятичном формате (повторяющееся число 0,33333333333333333333).

Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

0mega

Цитировать=1-0,55-0,45+0
Вполне убедительный пример.Спасибо

P.S.
Не замечал я раньше за этим сайтом "косяков"
А тут, вдруг, пост пропал.
Интересно то, что Сергей на него ответил, а поста нет ?! :-[

zs

=ЗАМЕНИТЬ(C1;1;НАЙТИ(",";C1);"") - Ребята,мне кажется с этой стороны попроще ;)

0mega

zs , здравствуйте
Цитата: zs от 25.02.2013, 23:31
=ЗАМЕНИТЬ(C1;1;НАЙТИ(",";C1);"") - Ребята,мне кажется с этой стороны попроще ;)
Красивое и простое решение !
Осталось добавить бинарное отрицание ,
Благодарю