|
13 | 13 | package io.kubernetes.client.custom;
|
14 | 14 |
|
15 | 15 | import java.math.BigDecimal;
|
| 16 | +import java.math.BigInteger; |
16 | 17 | import java.math.MathContext;
|
17 | 18 | import org.apache.commons.lang3.tuple.Pair;
|
18 | 19 |
|
@@ -64,43 +65,43 @@ private boolean isFractional(Quantity quantity) {
|
64 | 65 |
|
65 | 66 | private String toBase1024String(final Quantity quantity) {
|
66 | 67 | final BigDecimal amount = quantity.getNumber();
|
67 |
| - final long value = amount.unscaledValue().longValue(); |
| 68 | + final BigInteger value = amount.unscaledValue(); |
68 | 69 | final int exponent = -amount.scale();
|
69 |
| - final Pair<Long, Integer> resultAndTimes = removeFactorsForBase(value, 1024); |
| 70 | + final Pair<BigInteger, Integer> resultAndTimes = removeFactorsForBase(value, BigInteger.valueOf(1024)); |
70 | 71 | return resultAndTimes.getLeft()
|
71 | 72 | + new SuffixFormatter()
|
72 | 73 | .format(quantity.getFormat(), exponent + resultAndTimes.getRight() * 10);
|
73 | 74 | }
|
74 | 75 |
|
75 | 76 | private String toBase10String(final Quantity quantity) {
|
76 | 77 | final BigDecimal amount = quantity.getNumber();
|
77 |
| - final long value = amount.unscaledValue().longValue(); |
| 78 | + final BigInteger value = amount.unscaledValue(); |
78 | 79 | final int exponent = -amount.scale();
|
79 |
| - final Pair<Long, Integer> resultAndTimes = removeFactorsForBase(value, 10); |
| 80 | + final Pair<BigInteger, Integer> resultAndTimes = removeFactorsForBase(value, BigInteger.TEN); |
80 | 81 | final int postFactoringExponent = exponent + resultAndTimes.getRight();
|
81 |
| - final Pair<Long, Integer> valueAndExponent = |
| 82 | + final Pair<BigInteger, Integer> valueAndExponent = |
82 | 83 | ensureExponentIsMultipleOf3(resultAndTimes.getLeft(), postFactoringExponent);
|
83 | 84 | return valueAndExponent.getLeft()
|
84 | 85 | + new SuffixFormatter().format(quantity.getFormat(), valueAndExponent.getRight());
|
85 | 86 | }
|
86 | 87 |
|
87 |
| - private Pair<Long, Integer> ensureExponentIsMultipleOf3(final long mantissa, final int exponent) { |
| 88 | + private Pair<BigInteger, Integer> ensureExponentIsMultipleOf3(final BigInteger mantissa, final int exponent) { |
88 | 89 | final long exponentRemainder = exponent % 3;
|
89 | 90 | if (exponentRemainder == 1 || exponentRemainder == -2) {
|
90 |
| - return Pair.of(mantissa * 10, exponent - 1); |
| 91 | + return Pair.of(mantissa.multiply(BigInteger.TEN), exponent - 1); |
91 | 92 | } else if (exponentRemainder == -1 || exponentRemainder == 2) {
|
92 |
| - return Pair.of(mantissa * 100, exponent - 2); |
| 93 | + return Pair.of(mantissa.multiply(BigInteger.valueOf(100)), exponent - 2); |
93 | 94 | } else {
|
94 | 95 | return Pair.of(mantissa, exponent);
|
95 | 96 | }
|
96 | 97 | }
|
97 | 98 |
|
98 |
| - private Pair<Long, Integer> removeFactorsForBase(final long value, final int base) { |
| 99 | + private Pair<BigInteger, Integer> removeFactorsForBase(final BigInteger value, final BigInteger base) { |
99 | 100 | int times = 0;
|
100 |
| - long result = value; |
101 |
| - while (result >= base && result % base == 0) { |
| 101 | + BigInteger result = value; |
| 102 | + while (result.compareTo(base) >= 0 && result.mod(base).equals(BigInteger.ZERO)) { |
102 | 103 | times++;
|
103 |
| - result = result / base; |
| 104 | + result = result.divide(base); |
104 | 105 | }
|
105 | 106 | return Pair.of(result, times);
|
106 | 107 | }
|
|
0 commit comments