From 41812fcb7fad10b5c9fa9ecf0137ebc5c3b5955a Mon Sep 17 00:00:00 2001 From: capak07 <69026837+capak07@users.noreply.github.com> Date: Mon, 8 Apr 2024 22:25:42 -0300 Subject: [PATCH] Added FormattedDouble class to be able to cast as double --- .../google/gson/internal/FormattedDouble.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 gson/src/main/java/com/google/gson/internal/FormattedDouble.java diff --git a/gson/src/main/java/com/google/gson/internal/FormattedDouble.java b/gson/src/main/java/com/google/gson/internal/FormattedDouble.java new file mode 100644 index 0000000000..5b692bced6 --- /dev/null +++ b/gson/src/main/java/com/google/gson/internal/FormattedDouble.java @@ -0,0 +1,66 @@ +public class FormattedDouble extends Number { + private static final long serialVersionUID = 1L; + + // ThreadLocal because DecimalFormat is not thread-safe + private static final ThreadLocal format = + // Specify DecimalFormatSymbols to make code independent from default Locale + ThreadLocal.withInitial(() -> new DecimalFormat("0.00", DecimalFormatSymbols.getInstance(Locale.ENGLISH))); + + private final Double delegate; + + public FormattedDouble(Double value) { + Objects.requireNonNull(value, "Value should not be null"); + this.delegate = value; + } + + @Override + public byte byteValue() { + return delegate.byteValue(); + } + + @Override + public short shortValue() { + return delegate.shortValue(); + } + + @Override + public int intValue() { + return delegate.intValue(); + } + + @Override + public long longValue() { + return delegate.longValue(); + } + + @Override + public float floatValue() { + return delegate.floatValue(); + } + + @Override + public double doubleValue() { + return delegate.doubleValue(); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } else if (obj instanceof FormattedDouble) { + return ((FormattedDouble) obj).delegate.equals(delegate); + } else { + return false; + } + } + + @Override + public int hashCode() { + return 31 * delegate.hashCode() + format.get().hashCode(); + } + + @Override + public String toString() { + return format.get().format((double) delegate); + } +} \ No newline at end of file