Деление

Тема в разделе "Lotus - Программирование", создана пользователем NickProstoNick, 13 фев 2009.

  1. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем привет!
    Нужна помошь по математике :wacko:
    Нужно делить дробные числа. Максимальное число деления - 10
    Для начала делить на равные части. С точностью до 2-х знаков. но потом при изменении любого элемента массива должно влечь за собой изменение следующих за ним.

    Я пытаюсь сделать расчет в долях.
    Например 51.65 (s) на разделить на 7 (n). Исходное значение беру за единицу и получаю массив ( mas(i) ) где каждый элеменит до n-1 равен 0.14, а n-тый равен s - (сумма mas(i) от 1 до n-1). Ну а в итоге каждый элемент mas(i) * s с округлением до 2-х знаков

    Но все ничего если бы не надо было округлять полученый результат :(
    Сумма делений не сходится с исходной. Для разных чисел погрешность разная

    Помогите плиз. как правильно считать?
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Лично я мало что понял. И совсем не понял зачем это. :wacko:
     
  3. K-Fire

    K-Fire Гость

    Хранить в полях (или в переменных) числа без округления, сумма будет считаться нормально. А отображать пользователям в округленном виде до 2х знаков.
     
  4. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    NickProstoNick я тоже особо не понял задачку, но точно знаю что функция округления лотуса НЕ ПРАВИЛЬНО работает - точнее по своим правилам, поэтому могу предложить для округление вот такое к примеру:

    Код (Text):
    Function RSRound(number As Double, places As Integer) As Double

    Dim factor As Double   
    factor = 10 ^ places
    RSRound = Sgn(number) * Fix( Abs(number) * factor + 0.5) / factor

    End Function
     
  5. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    K-Fire
    Всю математику делаю с массивами. Поля толко для отображения и ввода данных
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Видов округлений целая пачка.
    Лотус использует округление, где 5-ка округляется в большую или меньшую сторону в зависимости от её позиции после запятой (чётная/нечётная).
    Кстати, раньше учили округлять именно так (читал книжку по математике 60-ых годов), а в современной школе 5-ка почему то всегда округляется в бОльшую сторону, что при большом кол-ве округляемых чисел даст бОльшую погрешность, чем лотусное округление.
    А NickProstoNick, судя по всему, делает разбивку полной суммы на несколько, скажем так, товаров :wacko:
     
  7. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Murtas
    Ну а задача проста. Поделить одно число на другое. И показать пользователю что сумма частей равна исходному значению. И пользователь должен видеть значения с точностью до 2-х знаков. Грубо говоря у меня не получается правильно светить результат всей математики

    Omh
    Именно это и пытаюсь сделать :wacko:
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Тогда поздравляю :wacko:
    Если там потом ещё придётся вычитать налог от полной суммы и потом, например, показать налог на каждый товар, то вообще радости начнутся :(

    Задача, кстати, несмотря на кажущуюся простоту, не такая уж и тривиальная.
    Я на прошлой работе так и не дожал её реализацию: наколько мне известно, время от времени в инвойсах до сих пор лишняя копейка вылазит :)
     
  9. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Omh
    У тебя есть пистолет? :wacko:

    Налоги, слава яйцам, считать не надо... пока... но эта лишняя копейка....
     
  10. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну пока я что вижу в твоей задаче?

    Берём сумму 51,65 (s).
    Делим на кол-во товаров (7).
    Получаем цену товара неокруглённую: 7,37857...
    Берём цену товара с точностью как нам надо без всяких округлений (допустим, 2 знака): 7,37

    Считаем остаток: 51,65 - 7,37*7 = 6
    Остаётся 6 копеек.
    Раскидываем эти копейки по товарам.
    Итого 6 товаров будут стоить 7,38 и один - 7,37

    А что делать :wacko:
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    значала была теория :)...
    дык вот в большинстве своем Нотуся оперирует числами в "плавающем" формате - что есть зло
    существует тип каренси - отличающийся точностью
    но из-за округления мы получим разницу - по-любому
    обычно - считают с округлением и без... и разницу приплюсовывают к какому-либо элементу массива (отнесение на конец/начало периода - ежели про бухгалтерию)
    в случ. с товарами можно разносить, но не всегда это вариант
     
  12. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ну это собственно и предлагалось выше :)
     
  13. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Currency отличается в 1-ю очередь не точностью, а арифметикой с фиксированной запятой AFAIR. Точность же может зависеть от платформы (возможно, конечно, что движок реализует ВСЮ арифметику программно.. но сомнительно). На Интелях currency реализована через 10-байтовую BCD, что точнее integer*4 и REAL*8 (часто). А на mainfreim-ах к примеру плавающая арифметика м.б. и 16-ти байтовая. BCD там тоже есть, но всего лишь 16-ти разрядная (8 байт). Как реализована currency на RISC-ах - х.з...
     
Загрузка...

Поделиться этой страницей