C++ Valutanummerformatsfunktion
En peng för dina tankar
Givet ett positivt heltal n som representerar mängden cent du har, returnera det formaterade valutabeloppet. Till exempel, givet n = 123456, returnera "1 234,56".
Exempel 1
Ingång
n = 132
Utgång
"1.32"Exempel 2
Ingång
n = 2
Utgång
"0,02"Exempel 3
Ingång
n = 100000000
Utdata
"1 000 000,00"
Formatera ett valutanummer med C++
Även om den här uppgiften kan verka enkel med den inbyggda funktionen såsom printf eller String-formatet (i Python), verkar det inte vara en trivial uppgift att implementera denna siffer-/valutaformatering. Först skulle vi behöva få penny-delen (bråk) genom att beräkna de två sista siffrorna (återstoden med 100). Sedan måste vi gruppera de andra siffrorna i tre.
Vi behöver en string pad-funktion för att lägga till de inledande nollorna för de mittersta grupperna och även penny (upp till 2 siffror som 0,01). Den mest signifikanta gruppen ska inte lägga till inledande nollor. Siffrorna är åtskilda med kommatecken.
string solve(int n) {
auto pad = [](int v, int d) {
string ans = std::to_string(v);
if (ans.size() < d) {
ans = string(d - (int)ans.size(), '0') + ans;
}
return ans;
};
int cents = n % 100;
n /= 100;
vector<int> groups;
while (n > 0) {
groups.insert(begin(groups), n % 1000);
n /= 1000;
}
string ans = "";
if (!groups.empty()) {
ans += std::to_string(groups[0]);
if (groups.size() > 1) {
ans += ",";
for (int i = 1; i + 1 < groups.size(); ++ i) {
ans += pad(groups[i], 3) + ",";
}
ans += pad(groups.back(), 3);
}
} else {
ans += "0";
}
ans += ".";
ans += pad(cents, 2);
return ans;
}
Ovanstående C++-funktion deklarerar en lokal lambda- funktion med den funktionella syntaxen. Sedan grupperar vi siffrorna i tre och lägger dem i vektorn. Sedan stoppar vi varje grupp inklusive pennydelen.