Ho cercato in qualche modo di determinare la scala e la precisione di un decimale in C#, che mi ha portato a diverse domande SO, ma nessuno di loro sembra aver corretto risposte, o hanno titoli fuorvianti (in realtà riguardano SQL server o qualche altro db, non C#), o nessuna risposta. Il seguente post, credo, è più vicino a quello che sto cercando, ma anche questo sembra sbagliato:In realtà, matematicamente determinare la precisione e la scala di un valore decimale
Determine the decimal precision of an input number
In primo luogo, sembra che ci sia una certa confusione circa la differenza tra bilancia e precisione. Per Google (per MSDN):
"La precisione è il numero di cifre in un numero. La scala è il numero di cifre a destra del punto decimale in un numero."
Con ciò detto, il numero 12345.67890M
avrebbe una scala di 5 e una precisione di 10. Non ho scoperto un singolo esempio di codice che calcoli accuratamente questo in C#.
voglio fare due metodi helper, decimal.Scale()
e decimal.Precision()
, in modo tale che il seguente test di unità Passaggi:
[TestMethod]
public void ScaleAndPrecisionTest()
{
//arrange
var number = 12345.67890M;
//act
var scale = number.Scale();
var precision = number.Precision();
//assert
Assert.IsTrue(precision == 10);
Assert.IsTrue(scale == 5);
}
... ma devo ancora trovare un frammento che farà questo, anche se molti la gente ha suggerito di usare decimal.GetBits()
, e altri hanno detto, convertirlo in una stringa e analizzarlo.
Convertirlo in una stringa e analizzarlo è, a mio avviso, un'idea orribile, ignorando anche il problema di localizzazione con il punto decimale. La matematica dietro al metodo GetBits()
, tuttavia, è come il greco per me.
Qualcuno può descrivere come sarebbero i calcoli per determinare la scala e la precisione in un valore decimal
per C#?
Puoi spiegare perché credi che la precisione sia 10? Ci sono 11 cifre in quel numero, con due zeri finali, lasciando 9 ovviamente significative. Non vedo da dove vengono 10. –
La modifica non cambierà anche la scala? –
... si. Sì, lo farebbe. Io succhio. Risolto il problema –