Domanda

Sto tentando di creare grafico Etichette asse - il testo fisico. So come ottenere le etichette e stampare utilizzando GDI, ma il mio algoritmo non fa un grande lavoro di stampa con passaggi frazionari.

Per stampare le etichette, che attualmente ottenere la prima etichetta e quindi aggiungere un passo per ogni etichetta che segue:

public static void PrintLabels(double start, double end, double step);
{
    double current = start;

    while (current <= end)
    {
        gfx.DrawString(current.ToString(),...); 
        current += step;
    }
}

C'è un number.ToString("something") che stamperà decimali se ci sono, altrimenti solo tutta la parte? Desidero in primo luogo verificare se sia all'inizio, alla fine o passo contiene una parte frazionaria, poi, se sì, stampare tutte le etichette con un decimale.

È stato utile?

Soluzione

Vedi le stringhe di formato personalizzato qui: http://msdn.microsoft. com / it-it / library / 0c899ak8.aspx Credo di aver capito la tua domanda ... fa

   current.ToString("#0.#");

dare il comportamento che stai chiedendo? Io uso spesso "#,##0.####" per etichette simili. Inoltre, si veda questa domanda: Formattazione di numeri con le figure significative in C #

Altri suggerimenti

Non c'è niente di sbagliato con l'utilizzo di una stringa formato personalizzato, ma il stringa numerica standard generale formato ( "G") funzionerà bene anche in questo caso, come mi è stato di recente ricordato:

current.ToString("G");

Ecco un, esempio veloce self-contained che giustappone il costume e standard di formato stringa approcci ...

double foo = 3.0;
double bar = 3.5;

// first with custom format strings
Console.WriteLine(foo.ToString("#0.#"));
Console.WriteLine(bar.ToString("#0.#"));

// now with standard format strings
Console.WriteLine(foo.ToString("G"));
Console.WriteLine(bar.ToString("G"));

..., che i rendimenti:

3
3.5
3
3.5
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top