public string ToPointsString(ulong points, bool justTopDollar = false)
{
string value = "";
ulong pointValue = points;
for(int i = units.Length - 1; i >= 0; i--) {
ulong unitMin = units[i].value;
if(pointValue >= unitMin) {
double unitValue = (double)pointValue / unitMin;
if(unitValue > 0) {
if(justTopDollar) {
value += unitValue.ToStringWithCommaAndDecimals(1) + " " + (unitValue == 1 ? units[i].nameSingular : units[i].namePlural) + " ";
break;
} else {
pointValue -= (ulong)unitValue * unitMin;
value += (ulong)unitValue + " " + (unitValue == 1 ? units[i].nameSingular : units[i].namePlural);
}
}
}
}
if(value.IsEmpty()) {
value = "0 " + units[0].namePlural;
}
return value;
}