Алгоритм определения следующей более высокой цифры, которая может быть разделена на степень 10 - PullRequest
0 голосов
/ 29 марта 2019

Я вычисляю число, которое должно быть размером шага оси на диаграмме.

Расчетное число является наименьшим из возможных (с учетом доступных пикселей и т. Д.).

Теперь я хочу округлить это число до следующей степени 10.

Вот как я вычисляю наименьший возможный размер шага:

var maxNumberOfBars = Math.DivRem(this.Pixel, 8, out remainder); //8 is the min width of a bar
var minRange = (range.End - range.Start) / maxNumberOfBars;`

Я приведу несколько примеров для лучшего понимания: Расчетное число: 6 - число, которое я хочу: 10

Расчетное число: 55 - число, которое я хочу: 100

Расчетное число: 355 - число, которое я хочу: 1000

Расчетное число: 755 - число, которое я хочу: 1000

Расчетное число: 5755 - число, которое я хочу: 10000

Так что мне нужны вычисления, которые подходят для всех этих случаев.

Ответы [ 4 ]

3 голосов
/ 29 марта 2019
     Math.Pow(10,(int)Math.Ceiling(Math.Log10(number)));    

Соответствует вашему примеру

3 голосов
/ 29 марта 2019

Я думаю, что вы можете сделать это с Math.Log:

int val = 55;
var power = Math.Ceiling(Math.Log10(val));
int calcNum = (int)Math.Pow(10, power);

// outputs 100

Попробуйте онлайн

1 голос
/ 29 марта 2019

Вы можете взять основную запись 10 и округлить ее до следующей старшей цифры и, соответственно, выполнить Math.Pow.

static void Main(string[] args)
{
    List<int> number = new List<int> { 5, 55, 555, 5555, 55555 };
    number.Select(ReturnLog10Exponent).ToList().ForEach(Console.WriteLine);
}

static int ReturnLog10Exponent(int Number)
{
    double base10Log = Math.Round((Math.Log(Number) / Math.Log(10)), 0);
    return (int)Math.Pow(10, base10Log);
}

Какие выходы:

10
100
1000
10000
100000
1 голос
/ 29 марта 2019

Используйте это:

int result = (int)Math.Pow(10,Math.Round(Math.Log(n,10) - Math.Log(5.5,10) + 0.5));

Взято из:

https://ubuntuforums.org/showthread.php?t=816175

Бихроматический раствор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...