Как к раунду десятичное число к ближайшей части?

Я не могу решить между Типы "кортеж" Типа , Нулевого указателя , или Regex. 'Foreach' возрос там также. 'Интеллектуальные указатели' само собой разумеется...:-)

В основном, я действительно с нетерпением жду обновления.

Лично я думаю, что интенсивное использование типа нулевого указателя собирается поймать много ошибок. Кортежи являются большими для контакта с реляционными данными. Много интересного материала.

7
задан sheats 1 October 2009 в 21:17
поделиться

6 ответов

Чтобы найти ближайшее кратное 1 / n:

lower_bound = 1.0 / n * Math.floor(n * your_number);
upper_bound = 1.0 / n * Math.ceil(n * your_number);

Вы можете использовать особую обработку, если ваше число уже кратно 1/16.

// alternate solution so that lower_bound <= your_number < upper_bound
lower_bound = 1.0 / n * Math.floor(n * your_number);
upper_bound = 1.0 / n * Math.floor(n * your_number + 1.0);
14
ответ дан 6 December 2019 в 06:50
поделиться

Вы умножаете значение на 16, используете метод floor или ceil и делите на 16:

var higher = Math.ceil(number * 16) / 16;
var lower = Math.floor(number * 16) / 16;
9
ответ дан 6 December 2019 в 06:50
поделиться
function bounds(number, numerator, denominator) {
  var frac = denominator/numerator;
  return {
    lower: Math.floor(frac * number) / frac,
    upper: Math.ceil(frac * number) / frac,
  }
} 


bounds(26.746346081599476,1,16)
// returns an object with properties
// lower : 26.6875 
// upper : 26.75
2
ответ дан 6 December 2019 в 06:50
поделиться

Похоже на округление до ближайшего 16-го…

rounded = Math.round(number * 16) / 16;

Вы можете получить числа, которые не являются точными из-за представления с плавающей точкой, но это не имеет значения в вашем случае, если вы используете его только для кеширования.

1
ответ дан 6 December 2019 в 06:50
поделиться

На какие наименьшие дроби вы хотите разделить? IE, будут ли 16-е самые маленькие приращения?

Если да, просто умножьте свое число на 16. Обрежьте его до целого числа и разделите на 16, чтобы найти нижнюю границу. Усечь его до int, прибавить 1, затем разделить на 16, чтобы найти верхнюю границу.

0
ответ дан 6 December 2019 в 06:50
поделиться

Пара стратегий, которые пока не опубликованы:

A) Создайте таблицу поиска, которая отображает цифры после десятичной дроби в ближайшую 16-ю. Просто используйте любую точность, которая вам нужна (вероятно, сотые).

B) создайте таблицу всех 16-х от 0 до 1 и выполните поиск в двоичном стиле с вашим числом% 1.

0
ответ дан 6 December 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: