]>
Commit | Line | Data |
---|---|---|
0f5d89e8 A |
1 | // © 2017 and later: Unicode, Inc. and others. |
2 | // License & terms of use: http://www.unicode.org/copyright.html | |
3 | ||
4 | #include "unicode/utypes.h" | |
5 | ||
6 | #if !UCONFIG_NO_FORMATTING | |
7 | ||
8 | #include "unicode/numberformatter.h" | |
9 | #include "number_types.h" | |
10 | ||
11 | using namespace icu; | |
12 | using namespace icu::number; | |
13 | using namespace icu::number::impl; | |
14 | ||
15 | ||
16 | ScientificNotation Notation::scientific() { | |
17 | // NOTE: ISO C++ does not allow C99 designated initializers. | |
18 | ScientificSettings settings; | |
19 | settings.fEngineeringInterval = 1; | |
20 | settings.fRequireMinInt = false; | |
21 | settings.fMinExponentDigits = 1; | |
22 | settings.fExponentSignDisplay = UNUM_SIGN_AUTO; | |
23 | NotationUnion union_; | |
24 | union_.scientific = settings; | |
25 | return {NTN_SCIENTIFIC, union_}; | |
26 | } | |
27 | ||
28 | ScientificNotation Notation::engineering() { | |
29 | ScientificSettings settings; | |
30 | settings.fEngineeringInterval = 3; | |
31 | settings.fRequireMinInt = false; | |
32 | settings.fMinExponentDigits = 1; | |
33 | settings.fExponentSignDisplay = UNUM_SIGN_AUTO; | |
34 | NotationUnion union_; | |
35 | union_.scientific = settings; | |
36 | return {NTN_SCIENTIFIC, union_}; | |
37 | } | |
38 | ||
39 | ScientificNotation::ScientificNotation(int8_t fEngineeringInterval, bool fRequireMinInt, | |
40 | impl::digits_t fMinExponentDigits, | |
41 | UNumberSignDisplay fExponentSignDisplay) { | |
42 | ScientificSettings settings; | |
43 | settings.fEngineeringInterval = fEngineeringInterval; | |
44 | settings.fRequireMinInt = fRequireMinInt; | |
45 | settings.fMinExponentDigits = fMinExponentDigits; | |
46 | settings.fExponentSignDisplay = fExponentSignDisplay; | |
47 | NotationUnion union_; | |
48 | union_.scientific = settings; | |
49 | *this = {NTN_SCIENTIFIC, union_}; | |
50 | } | |
51 | ||
52 | Notation Notation::compactShort() { | |
53 | NotationUnion union_; | |
54 | union_.compactStyle = CompactStyle::UNUM_SHORT; | |
55 | return {NTN_COMPACT, union_}; | |
56 | } | |
57 | ||
58 | Notation Notation::compactLong() { | |
59 | NotationUnion union_; | |
60 | union_.compactStyle = CompactStyle::UNUM_LONG; | |
61 | return {NTN_COMPACT, union_}; | |
62 | } | |
63 | ||
64 | Notation Notation::simple() { | |
65 | return {}; | |
66 | } | |
67 | ||
68 | ScientificNotation | |
69 | ScientificNotation::withMinExponentDigits(int32_t minExponentDigits) const { | |
70 | if (minExponentDigits >= 1 && minExponentDigits <= kMaxIntFracSig) { | |
71 | ScientificSettings settings = fUnion.scientific; | |
72 | settings.fMinExponentDigits = static_cast<digits_t>(minExponentDigits); | |
73 | NotationUnion union_ = {settings}; | |
74 | return {NTN_SCIENTIFIC, union_}; | |
75 | } else { | |
76 | return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR}; | |
77 | } | |
78 | } | |
79 | ||
80 | ScientificNotation | |
81 | ScientificNotation::withExponentSignDisplay(UNumberSignDisplay exponentSignDisplay) const { | |
82 | ScientificSettings settings = fUnion.scientific; | |
83 | settings.fExponentSignDisplay = exponentSignDisplay; | |
84 | NotationUnion union_ = {settings}; | |
85 | return {NTN_SCIENTIFIC, union_}; | |
86 | } | |
87 | ||
88 | #endif /* #if !UCONFIG_NO_FORMATTING */ |