|
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