Есть ли способ сделать вывод JScience более удобным для человека?
Когда я использую toString() для объектов JScience Amount, я получаю следующие результаты:
(7.5 ± 4.4E-16) mph
Это не ужасно, но мне бы очень хотелось, чтобы это выглядело примерно так:
7.5 miles per hour
Есть простой способ сделать это?
редактировать: просто чтобы уточнить, я надеюсь на решение, которое будет работать для любой суммы с любым типом единиц (или, по крайней мере, со всеми заранее определенными), а не только "миль / ч".
1 ответ
Хотя он отбрасывает ошибки и единицы измерения, вы можете сделать что-то вроде этого:
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) миль / ч 7,5 миль в час
Приложение: Я надеюсь на решение, которое будет работать на любую сумму с любыми единицами.
Вам все равно придется предоставить собственную метку, чтобы заменить стандартную 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 миль в час