Есть ли способ сделать вывод JScience более удобным для человека форматом? - PullRequest
1 голос
/ 15 декабря 2011

Когда я использую toString () для объектов JScience Amount, я получаю следующие результаты:

(7.5 ± 4.4E-16) mph

Это не ужасно, но мне бы очень хотелось, чтобы выглядело что-то вроде:

7.5 miles per hour

Есть ли простой способ сделать это?

edit: Просто чтобы прояснить, я надеюсь на решение, которое будет работать для любой суммы с любым типом единиц (или, по крайней мере, со всеми заранее определенными), а не только с "mph" ».

1 Ответ

2 голосов
/ 15 декабря 2011

Хотя он отбрасывает ошибки и единицы измерения, вы можете сделать что-то вроде этого:

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
...