2011-12-15 3 views
1

Когда я использую ToString() для объектов JScience Сумма Я получаю результаты, как это:Есть ли способ сделать вывод JScience в более «удобном для человека» формате?

(7.5 ± 4.4E-16) mph 

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

7.5 miles per hour 

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

Редактировать: Чтобы уточнить, я надеюсь на решение, которое будет работать для любой суммы с любыми типами Единиц (или, по крайней мере, всеми предопределенными), а не только «mph».

+0

Вы пробовали настройки свой собственный формат на org.jscience.physics.amount.AmountFormat? –

+0

@Roger У меня нет, есть ли способ сделать то, что мне нужно, в общем с ним? – sanity

+0

Кажется довольно простым установить статический формат суммы. Например, у javadoc есть пример. См. Http://jscience.org/api/org/jscience/physics/amount/AmountFormat.htmlMybe getExactDigitsInstance - это то, что вам нужно. –

ответ

2

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

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 
+0

Правильно, однако я надеюсь на решение, которое работает для любой суммы с любыми единицами, mph было всего лишь примером – sanity

+0

Я думаю, что ответ сводится к «писать код» – Bill

+0

Да, больше выше. – trashgod

 Смежные вопросы

  • Нет связанных вопросов^_^