Domanda

Voglio che un numero intero sia multiplo di 10.100.1000 e così via ...

Ad esempio double val = 35 quindi voglio int 40
val = 357 quindi voglio int val = 400
val = 245.567 quindi voglio int val = 300.000
val = 245.567.986 quindi voglio anche int = 300.000

C'è qualcosa in C # che può aiutare a generare questi numeri interi

La logica di base che posso pensare è: Estrai il primo intero, aggiungi 1 ad esso. Contare il numero totale di cifre e aggiungere zeri (totalno -1).

C'è un modo migliore?

Voglio assegnare questi valori all'asse del grafico. Sto cercando di creare dinamicamente i valori dell'etichetta dell'asse in base ai punti dati dei grafici.

È stato utile?

Soluzione

Questo dovrebbe fare quello che vuoi dove x è l'input:

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

Output:

 35          40
 357         400
 245567      300000
 245567.986  300000

Se vuoi far fronte a numeri negativi (supponendo che tu voglia arrotondare da 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);

Che dà:

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

Altri suggerimenti

Questo approccio funzionerebbe con valori positivi e negativi di 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);

Non posso darti una risposta specifica per c # , ma generalmente quello che stai cercando è log10 , qualunque cosa venga chiamata in c # . Se si desidera operare sul numero.

Se si tratta dell'output, puoi effettivamente operare su stringa, saltare / regolare il primo numero, ecc.

Questo dovrebbe essere il trucco:

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

var result = Math.Ceiling(val/multiplier)*multiplier;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top