Przede wszystkim upewnij się, że nie używasz liczby zmiennoprzecinkowej do reprezentowania dolarów i centów (zobacz inne posty z tego powodu, ale prostym powodem jest to, że nie wszystkie liczby dziesiętne mogą być reprezentowane jako zmienne, np. 1,79 USD).
Oto jeden sposób to zrobić:
decimal total = 143.13m;
int numberOfEntries = 5;
decimal unadjustedEntryAmount = total/numberOfEntries;
decimal leftoverAmount = total - (unadjustedEntryAmount * numberOfEntries);
int numberOfPenniesToDistribute = leftoverAmount * 100;
int numberOfUnadjustedEntries = numberOfEntries - numberOfPenniesToDistribute;
Więc teraz masz niedostosowanej ilości 28.62, a potem trzeba zdecydować, jak rozłożyć resztę. Możesz rozprowadzić dodatkową pensę za każdą rozpoczętą u góry lub u dołu (wygląda na to, że chcesz od dołu).
for (int i = 0; i < numberOfUnadjustedEntries; i++) {
Console.WriteLine(unadjustedEntryAmount);
}
for (int i = 0; i < numberOfPenniesToDistribute; i++) {
Console.WriteLine(unadjustedEntryAmount + 0.01m);
}
Możesz również dodać całą resztę do pierwszego lub ostatniego wpisu. Wreszcie, w zależności od potrzeb księgowych, możesz również utworzyć oddzielną transakcję dla pozostałej części.
Integer podział jest wszystko, czego potrzebujemy. Nie powinieneś używać pływaków do pieniędzy. –
Czy możesz rozwinąć? – Amberite
Decimal to poprawny typ, którego należy tutaj użyć (inny niż float) – justinlatimer