#c# #.net #algorithm #math
#c# #.net #алгоритм #математика
Вопрос:
Я вычисляю число, которое должно быть размером шага оси на гистограмме.
Вычисленное число является наименьшим из возможных (с учетом доступных пикселей и т.д.).
Теперь я хочу округлить это число до следующей степени 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
Итак, мне нужны некоторые вычисления, которые подходят для всех этих случаев.
Ответ №1:
Math.Pow(10,(int)Math.Ceiling(Math.Log10(number)));
Соответствует вашему примеру
Ответ №2:
Я думаю, вы можете сделать это с Math.Log
:
int val = 55;
var power = Math.Ceiling(Math.Log10(val));
int calcNum = (int)Math.Pow(10, power);
// outputs 100
Ответ №3:
Используйте это:
int result = (int)Math.Pow(10,Math.Round(Math.Log(n,10) - Math.Log(5.5,10) 0.5));
Взято из:
Решение Bichromat
Ответ №4:
Вы можете взять базовую логарифмическую величину 10 и округлить ее до следующей более высокой цифры и произвести вычисления.Следовательно, 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