jak o użyciu funkcji toString a następnie podzielone na miejsca po przecinku, tj:
[edytuj] szybkie trochę klasy/metody badania:
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;
}
}
użycie:
Test test = new Test();
var result = test.SplitDecimal(12.1m);
zgodnie z komentarzem Dana, to faktycznie wywnioskuje, że 12.1 zwraca 12 i 10 jako wynikowe liczby całkowite. Czy to jest poprawne?? - kto wie, ale na razie omija tę sprawę. Wynika to z części ToString ("0. {0}"), która domyślnie dodaje "0" na końcu dowolnej części dziesiętnej, która ma tylko jedną cyfrę.
Lepszym rozwiązaniem może być użycie przecinku w ogóle, ale użyć 'int' /' long' reprezentujący „swoją wartość pomnożone przez 100” . – Rawling
Uważaj na nietypowe wartości. Maksymalna wartość dziesiętna wynosi ~ 7.9e28. Maksymalna wartość dla int wynosi ~ 2e9 (znacznie mniejsza). Nawet długo trwa ~ 9e18. Więc jeśli wiesz, że wartość zawsze będzie> = 0, możesz użyć ulong, który ciągnie się aż do ~ 18e18, dając nieco więcej swobody. – Davio
Następująca odpowiedź na podobne pytanie może odpowiadać tym potrzebom części ułamkowej: http://stackoverflow.com/a/13038524/1178314 –