wie etwa die toString-Funktion und dann auf dem Komma geteilt, das heißt:
[Bearbeiten] schnelle kleine Klasse/Methode zu testen:
public class Test
{
public struct FractionSplit
{
public int BeforeDecimal;
public int AfterDecimal;
}
public FractionSplit SplitDecimal(decimal decimalValue,
int decimalPrecision = 2)
{
// now do the split - the apres decimal precision defined by
// the format function which defaults to 2 places i.e. "0.00"
string splitValue = decimalValue.ToString(string.Format("0.{0}",
new String('0', decimalPrecision)), CultureInfo.InvariantCulture);
string[] splitParts = splitValue.Split('.');
// now factor out derived splits as ints into struct
var fractionSplit = new FractionSplit
{
BeforeDecimal = int.Parse(splitParts[0]),
AfterDecimal = int.Parse(splitParts[1])
};
return fractionSplit;
}
}
useage:
Test test = new Test();
var result = test.SplitDecimal(12.1m);
Gemäß Dans Kommentar wird dies in der Tat folgern, dass 12.1 12 und 10 als resultierende Ganzzahlen zurückgibt. Ist es richtig?? - wer weiß, aber deckt diesen Anwendungsfall vorerst ab. Dies liegt an dem ToString-Teil ("0. {0}"), der standardmäßig eine '0' am Ende einer Dezimalstelle hinzufügt, die nur eine Ziffer hat.
Ein besserer Ansatz nicht sein kann, überhaupt eine Dezimalzahl zu verwenden, aber verwenden, um eine 'int' /' long' darstellt „Ihr Wert multipliziert mit 100“ . – Rawling
Vorsicht vor ungewöhnlichen Werten. Der Maximalwert für eine Dezimalstelle ist ~ 7.9e28. Der maximale Wert für ein int ist ~ 2e9 (wesentlich kleiner). Sogar lange geht nur zu ~ 9e18. Wenn Sie also wissen, dass der Wert immer> = 0 ist, können Sie ein ulong verwenden, das bis zu ~ 18e18 reicht und etwas mehr Spielraum gibt. – Davio
Folgende Antwort auf eine ähnliche Frage kann diese Bedürfnisse für Bruchteil Teil: http://StackOverflow.com/a/13038524/1178314 –