Хотя он отбрасывает ошибки и единицы измерения, вы можете сделать что-то вроде этого:
Amount<Velocity> x = Amount.valueOf(7.5, NonSI.MILES_PER_HOUR);
System.out.println(x);
System.out.println(
x.doubleValue(NonSI.MILES_PER_HOUR) + " miles per hour");
Консоль
(7.5 ± 4.4E-16) mph
7.5 miles per hour
Приложение: Я надеюсь на решение, которое будет работать на любую сумму с любыми единицами.
Вам все равно придется предоставить собственную метку для замены значения по умолчанию UnitFormat
; символы метки ограничены isValidIdentifier()
. Вы также можете заменить свой собственный AmountFormat
, как предложено @Roger Lindsjö. В этом примере печатается произвольное количество значащих цифр оценочного значения и допустимая вариация вашей метки. См. Также TypeFormat
.
final UnitFormat uf = UnitFormat.getInstance();
uf.label(NonSI.MILES_PER_HOUR, "miles_per_hour");
AmountFormat.setInstance(new AmountFormat() {
@Override
public Appendable format(Amount<?> m, Appendable a) throws IOException {
TypeFormat.format(m.getEstimatedValue(), -1, false, false, a);
a.append(" ");
return uf.format(m.getUnit(), a);
}
@Override
public Amount<?> parse(CharSequence csq, Cursor c) throws IllegalArgumentException {
throw new UnsupportedOperationException("Parsing not supported.");
}
});
Amount<Velocity> x = Amount.valueOf(7.5, NonSI.MILES_PER_HOUR);
System.out.println(x);
Консоль
7.5 miles_per_hour