Middle
Ką galima naudoti vietoj float duomenų tipo finansinėms reikšmėms saugoti?
sobes.tech AI
Atsakymas iš AI
Piniginių reikšmių saugojimui vietoje float galima naudoti šiuos metodus:
-
Naudoti sveikojo tipo kintamąjį kopėkams (arba minimaliai valiutos vienetui) saugoti.
- Pavyzdys: Suma rubliais ir kopėkų, galima naudoti
long longbendram kopėkų kiekiui saugoti. - Privalumai: Tikslios skaičiavimai, nėra problemų su dešimtainių skaičių atvaizdavimu, greiti veiksmai.
- Trūkumai: Reikalingas papildomas kodas konvertavimui į eilutę su dešimtainiu skyrikliu.
// Pavyzdys: saugoti 123 rubliai ir 45 kopėkų long long amount_in_kopecks = 12345; - Pavyzdys: Suma rubliais ir kopėkų, galima naudoti
-
Naudoti specialų fiksuotosios taškų tipo.
- Atstovauja skaičių su fiksuotu dešimtainių ženklų skaičiumi. Gali būti įgyvendintas kaip klasė arba struktūra.
- Pavyzdys: Struktūra, sauganti sveiką ir dešimtainę dalį atskirai, arba viena kintamąjį, kuris numato tam tikrą dešimtainių ženklų skaičių.
- Privalumai: Tikslumas, galimybė perkrauti operatorius patogiam darbui.
- Trūkumai: Reikalauja savo įgyvendinimo arba trečiosios šalies bibliotekos.
// Paprastas pavyzdys: saugojimas struct FixedPoint { long long integer_part; int fractional_part; // Ženklų skaičius po kablelio, pvz., 2 kopėkams }; -
Naudoti biblioteką darbui su atsitiktiniais tiksliais skaičiais (Arbitrary Precision Arithmetic).
- Bibliotekos, tokios kaip
Boost.Multiprecision, suteikia tipus su nustatą arba dinamišką reikšmingų skaitmenų skaičių. - Privalumai: Aukšta tikslumas, lankstumas.
- Trūkumai: Našumo ir atminties sąnaudos, palyginti su įmontuotais tipais.
// Pavyzdys naudojant hipotetinę biblioteką // #include <money_types.h> // Money amount = Money("123.45"); - Bibliotekos, tokios kaip
-
Naudoti dešimtainį duomenų tipą, jei platforma arba biblioteka jį palaiko.
- Kai kurios kalbos arba duomenų bazės turi įmontuotus dešimtainius tipus (pvz.,
decimalC#-e,DECIMALSQL). C++ neturi įmontuoto dešimtainio tipo, bet yra pasiūlymų jį pridėti. - Trūkumai: Nativinės paramos trūkumas standartiniame C++, reikalinga trečiosios šalies bibliotekų naudojimas.
- Kai kurios kalbos arba duomenų bazės turi įmontuotus dešimtainius tipus (pvz.,
Pasirinkimas priklauso nuo tikslumo, našumo ir įgyvendinimo sudėtingumo reikalavimų.
Dauguma C++ programų naudoja visuotinį skaičių tipą, kad saugotų minimalų valiutos vienetą, kuris yra patikimiausias ir dažniausiai naudojamas būdas.