Pregunta

Quiero que un entero sea múltiplo de 10,100,1000 y así sucesivamente ...

Por ejemplo, double val = 35, entonces quiero int 40
val = 357 entonces quiero int val = 400
val = 245,567 entonces quiero int val = 300,000
val = 245,567.986, entonces también quiero int = 300,000

¿Hay algo en C # que pueda ayudar a generar estos enteros?

La lógica básica que puedo pensar es: extraer el primer entero, agregarle 1. Cuente el número total de dígitos y agregue ceros (totalno -1).

¿Hay alguna forma mejor?

Quiero asignar estos valores al eje del gráfico. Estoy tratando de crear dinámicamente los valores de etiqueta del eje en función de los puntos de datos de los gráficos.

¿Fue útil?

Solución

Esto debería hacer lo que quieras donde x es la entrada:

        double scale = Math.Pow(10, (int)Math.Log10(x));
        int val = (int)(Math.Ceiling(x / scale) * scale);

Salida:

 35          40
 357         400
 245567      300000
 245567.986  300000

Si desea que haga frente a números negativos (suponiendo que desea redondear desde 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);

Que da:

-35         -40
 0           0
 35          40
 357         400
 245567      300000
 245567.986  300000

Otros consejos

Este enfoque funcionaría tanto para valores positivos como negativos de 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);

No puedo darle una respuesta específica de c # , pero generalmente lo que está buscando es log10 , como se llame en c # . Si desea operar en número.

Si se trata de la salida, puede, de hecho, operar en cadena, omitir / ajustar el primer número, etc.

Esto debería ser el truco:

// val is the value
var log = Math.Floor(Math.Log10(val));
var multiplier = Math.Pow(10, log);

var result = Math.Ceiling(val/multiplier)*multiplier;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top