// prohibited, subject to the rule that there MUST be at least one digit
// before and after the decimal point. The value zero is represented as
// "0.0".
- final StringBuilder sb = new StringBuilder(21).append(intPart()).append('.');
+
+ final long intPart = intPart();
final long fracPart = fracPart();
+ final StringBuilder sb = new StringBuilder(21);
+ if (intPart == 0 && fracPart < 0) {
+ sb.append('-');
+ }
+ sb.append(intPart).append('.');
+
if (fracPart != 0) {
// We may need to zero-pad the fraction part
- sb.append(Strings.padStart(Long.toString(fracPart), scale(), '0'));
+ sb.append(Strings.padStart(Long.toString(Math.abs(fracPart)), scale(), '0'));
} else {
sb.append('0');
}
}
private long fracPart() {
- return Math.abs(value % FACTOR[offset]);
+ return value % FACTOR[offset];
}
private static byte offsetOf(final int scale) {
assertEquals("-1.0", Decimal64.valueOf(BigDecimal.ONE.negate()).toString());
}
+ @Test
+ public void testLeadingZeroToString() {
+ assertEquals("-0.63", Decimal64.valueOf("-0.63").toString());
+ }
+
@Test
public void testBoundaries() {
assertEquals(-128L, Decimal64.valueOf(1, Byte.MIN_VALUE).longValue());