Плохо! Плохо!:  0
Показано с 1 по 7 из 7

Тема: Дробные значения переменных

  1. #1
    Пользователь Аватар для AntiGM
    Информация о пользователе
    Регистрация
    04.11.2014
    Сообщений
    73
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию Дробные значения переменных

    Доброго времени суток.
    Столкнулся с проблемой, переменные в мейкере не принимают дробные значения, всё что меньше 1 это по её мнению 0.
    А мне просто необходимо придать переменной значение , к примеру 0.13, а замем эту переменную умножить на другую переменную.
    сценарий имеет вот такой вид:
    (($gameVariables.value(492)*1.5)+($gameVariables.v alue(493)/2)*($gameVariables.value(491)/100))
    Но из за того что переменная 491 принимает значение 0, вместо 0.13, всё работает не так как мне нужно.
    Вопрос, если ли плагины позволяющие обойти подобные трудности ?

  2. #2
    Познающий Аватар для Amur_87
    Информация о пользователе
    Регистрация
    28.09.2014
    Адрес
    ДВ, Амурская область
    Сообщений
    316
    Записей в дневнике
    3
    Репутация: 27 Добавить или отнять репутацию

    По умолчанию

    А для чего такая точность? Почему нельзя использовать целые числа?

  3. #3
    Пользователь Аватар для AntiGM
    Информация о пользователе
    Регистрация
    04.11.2014
    Сообщений
    73
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Amur_87 Посмотреть сообщение
    А для чего такая точность?
    Для того чтоб всё работало так как должно работать.

    Цитата Сообщение от Amur_87 Посмотреть сообщение
    Почему нельзя использовать целые числа?
    Ну хотя бы потому что при помощи целых чисел нельзя правильно использовать процентные манипуляции.

    Далее попрошу не задавать глупых вопросов. Ибо если я спрашиваю, значит мне оно нужно.

  4. #4
    Хранитель Аватар для Paranoid
    Информация о пользователе
    Регистрация
    22.12.2014
    Сообщений
    2,776
    Записей в дневнике
    34
    Репутация: 28 Добавить или отнять репутацию

    По умолчанию

    Я так понял ты на мв сидишь. Уже была тема по этому поводу. Так вот если я не ошибаюсь, то js плохо с нецелыми работает.
    Лицензионный VX Ace. Спасибо Петр.
    2 года мукеризма в пустую.

  5. #5
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    924
    Репутация: 79 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Paranoid Посмотреть сообщение
    Я так понял ты на мв сидишь. Уже была тема по этому поводу. Так вот если я не ошибаюсь, то js плохо с нецелыми работает.
    Ерунда, так же как и любой другой мейкер, если не в курсе, то лучше не говорить.

    Просто стандартная функция с переменными имеет в себе округление.
    Если нужны дроби, то нужно обращаться к переменным через вызов скриптов.
    Например:
    $gameVariables._data[1] = 0.11
    где 1 номер переменной.
    Это что касается установки значения, получать значение можно как и раньше стандартными средствами.

    Есть конечно особенность, при работе с дробями, но она не является уникальной для JS, это есть и у других языков, в том числе и Руби.
    Чтобы представлять о чем я говорю, то вот небольшая выдержка с одной статьи. Это нужно знать, если хочешь работать с дробями без округлений.
    Спойлер :
    Давайте вспомним 3-й класс и сложим несколько десятичных дробей. Результаты сложения в уме проверим в консоли JS:
    0.5 + 0.5; //1
    0.5 + 0.7; //1.2
    0.1 + 0.2; //0.30000000000000004;
    0.1 + 0.7; //0.7999999999999999;
    0.1 + 0.2 - 0.2; //0.10000000000000003

    Проблема: при сложении некоторых дробных чисел, выдаётся арифметически неверный результат.
    Объяснение: такие результаты получаются из-за особенностей работы c числами с плавающей точкой. Это не является особенностью JavaScript, другие языки работают также (я проверил в PHP, Python и Ruby).
    Совет: во-первых, вы, как программист, обязаны знать об особенностях работы компьютера с числами с плавающей точкой. Во-вторых, в большинстве случаев достаточно просто округлять результаты. Но, если вдруг необходимо выдавать пользователю точный результат, например, при работе с данными о деньгах, вы можете просто умножать все аргументы на 10 и результат делить обратно на 10
    Последний раз редактировалось dirge; 15.04.2017 в 11:49.

  6. #6
    Пользователь Аватар для AntiGM
    Информация о пользователе
    Регистрация
    04.11.2014
    Сообщений
    73
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию

    Спасибо всем кто ответил. Тему можно закрывать, но я не дождавшить ответов обратился к ДК и он мне всё разъяснил точно так же как писал dirge .

  7. #7
    Познающий Аватар для Deme
    Информация о пользователе
    Регистрация
    16.05.2014
    Сообщений
    317
    Записей в дневнике
    16
    Репутация: 4 Добавить или отнять репутацию

    По умолчанию

    В этой теме уже дали хороший ответ, но хотелось бы дополнить.

    Ещё можно использовать числа с фиксированной запятой: условиться, что какая-то часть переменной — это дробь. Скажем, решить, что две последние цифры — это дробь, и хранить не «0,13», а «13». Тогда умножение 0,13 на 1,5 заменяется на умножение 13 на 150 и деление на 100.

    (Правда, для вывода такого числа нужно будет разбить его на целую и дробную часть: в одну переменную записать число, разделённое на 100, а в другу — остаток от деления [mod] на 100. И ещё нужно при выводе дроби убедиться, что выводятся нули перед числом. В RM2k[3] её для этого придётся разбить на N переменных для каждого числа после запятой: первое число после запятой будет (число / 10) mod 10, второе — number mod 10.)

    Такой подход позволяет обойтись без скриптов, и потому его можно использовать в том числе в RPG Maker 2000/2003. Однако его невозможно использовать, если размерность заранее нельзя оценить (т.е. если одна переменная может принимать значения и в 99999, и 0,000001).
    Последний раз редактировалось Deme; 16.04.2017 в 16:45.
    «quī legis ista, tuam reprehendō, mea laudās // omnia, stultitiam; / nihil, invidiam» (Jōhannis Audoenī)
    'Ты, кто читает это: я порицаю, если ты хвалишь у меня // всё, твою глупость; / если ничего — твою злобу.' (Джон Оуэн)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Дробные значения переменных