Кратные 10,100,1000, ... C#
Я хочу, чтобы целое число было кратно 10,100,1000 и так далее...
для, например, double val = 35, тогда я хочу int 40
val = 357 тогда я хочу int val = 400
val = 245,567 тогда я хочу int val = 300,000
val = 245,567.986 тогда также я хочу int = 300,000
есть ли что-нибудь в C#, что может помочь в создании этих целых
основная логика, которую я могу думать: извлеките первое целое число, добавьте к нему 1. Подсчитайте общее количество цифр и добавьте нули (totalno -1 ).
есть ли лучший способ ?
Я хочу присвоить эти значения оси диаграммы. Я пытаюсь динамически создавать значения меток оси на основе точек данных диаграмм.
4 ответов
это должно делать то, что вы хотите, где X-входной сигнал:
double scale = Math.Pow(10, (int)Math.Log10(x));
int val = (int)(Math.Ceiling(x / scale) * scale);
выход:
35 40
357 400
245567 300000
245567.986 300000
если вы хотите, чтобы он справлялся с отрицательными числами (предполагая, что вы хотите округлить от 0):
double scale = (x == 0 ? 1.0 : Math.Pow(10, (int)Math.Log10(Math.Abs(x))));
int val = (int)(Math.Ceiling(Math.Abs(x) / scale) * scale)* Math.Sign(x);
что дает:
-35 -40
0 0
35 40
357 400
245567 300000
245567.986 300000
этот подход должен работать как для положительных, так и для отрицательных значений x:
int log = (x == 0) ? 1 : (int)(Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(x)))));
int result = (int)(((x < 0) ? Math.Floor(x / log) : Math.Ceiling(x / log)) * log);
не могу c#
-конкретный ответ, но вообще то, что вы ищете-это log10
, как бы это ни называлось в c#
. Если хотите оперировать по номеру.
Если речь идет о выходе, вы можете, действительно, работать со строкой, пропуская / регулируя первое число и т. д.
Это должно к трюку:
// val is the value
var log = Math.Floor(Math.Log10(val));
var multiplier = Math.Pow(10, log);
var result = Math.Ceiling(val/multiplier)*multiplier;