Ошибка cannot format given object as a number егиссо

The format() method of DecimalFormat is overloaded.

In the working case, you are invoking :

 public final String format(double number)

And in the failing case, you are invoking :

 public final String format (Object obj) 

The first method takes a very specific argument. It expects a double.

This is not the case of the second one, which the type accepted is very broad : Object and where so the check on the type passed is performed at runtime.

By providing a argument that is not a double but a String, the method invoked is the second one.

Under the hood, this method relies on the format(Object number, StringBuffer toAppendTo, FieldPosition pos) method that expects to a number argument that is an instance of the Number class (Short, Long, … Double):

@Override
public final StringBuffer format(Object number,
                                 StringBuffer toAppendTo,
                                 FieldPosition pos) {
    if (number instanceof Long || 
        number instanceof Integer ||                   
        number instanceof Short || 
        number instanceof Byte ||                   
        number instanceof AtomicInteger ||
        number instanceof AtomicLong ||
        (number instanceof BigInteger && ((BigInteger)number).bitLength () < 64)) {

        return format(((Number)number).longValue(), toAppendTo, pos);
    } else if (number instanceof BigDecimal) {
        return format((BigDecimal)number, toAppendTo, pos);
    } else if (number instanceof BigInteger) {
        return format((BigInteger)number, toAppendTo, pos);
    } else if (number instanceof Number) {
        return format(((Number)number).doubleValue(), toAppendTo, pos);
    } else {
        throw new IllegalArgumentException("Cannot format given Object as a Number");
    }
}

But it is not the case as you passed to it a String instance.

To solve the problem, either pass a double primitive as in the success case or convert your String into an instance of Number such as Double with Double.valueOf(yourString).
I advise the first way (passing a double) as it is more natural in your code that already uses double primitives.
The second one requires a additional conversion operation from String to Double.

5 ответов

Я не думаю, что есть способ сделать это только с DecimalFormat, но этот однострочный файл позаботится о проблеме:

formattedValue = formattedValue.replaceAll( "^-(?=0(.0*)?$)", "");

Он удаляет (заменяет на "") знак минус, если за ним следуют 0-n символов "0.00000...", поэтому это будет работать для любого аналогичного результата, такого как "-0", "-0." или "-0.000000000"

Вот несколько тестовых кодов:

public static void main(String[] args) {
    System.out.println(format(-0.023));
    System.out.println(format(12.123));
    System.out.println(format(-12.345));
    System.out.println(format(-0.123));
    System.out.println(format(-1.777));
}

public static String format(double number) {
    DecimalFormat df = new DecimalFormat("#,##0.0");
    df.setRoundingMode(RoundingMode.HALF_UP);
    String formattedValue = df.format(number);
    formattedValue = formattedValue.replaceAll("^-(?=0(.0*)?$)", "");
    return formattedValue;
}

Выход (как ожидалось):

0.0
12.1
-12.3
-0.1
-1.8

Bohemian
13 авг. 2012, в 08:25

Поделиться

Я думаю, что это было бы обходным путем, чтобы избежать -0.0. Используйте следующий код:

DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);       
df.setNegativePrefix(""); // set negative prefix BLANK
String formattedValue = df.format(-0.023);
df.setNegativePrefix("-"); // set back to - again
System.out.println(formattedValue);

Выход:

0.0

Nandkumar Tekale
13 авг. 2012, в 08:11

Поделиться

Попробуйте следующее: DecimalFormat df = new DecimalFormat("#,##0.0#;(#,##0.0#)");

В соответствии с Javadoc для DecimalFormat:

Паттерн DecimalFormat содержит положительный и отрицательный подшаблон, например, «#, ## 0.00; (#, ## 0.00)». Каждый подшаблон имеет префикс, числовая часть и суффикс. Отрицательный подшаблон является необязательным; если отсутствует, то положительный подшаблон с префиксом локализованного минуса знак (‘-‘ в большинстве локалей) используется как отрицательный подшаблон. Что «0,00» только эквивалентно «0,00; -0,00». Если есть явный отрицательный подшаблон, он служит только для указания отрицательного префикс и суффикс; количество цифр, минимальные цифры и другие характеристики все те же, что и положительный. Это значит что «#, ## 0.0 #; (#)» производит точно такое же поведение, как. «#, ## # 0,0; (#, ## # 0,0)»

Sujay
13 авг. 2012, в 06:34

Поделиться

Чтобы проверить, вычисленное value = «-0.0»
сделайте его равным «0.0»

и вы можете запрограммировать sushus как

public String getFormattedValue(String input) {
        DecimalFormat df = new DecimalFormat("#,##0.0");
        df.setRoundingMode(RoundingMode.HALF_UP);
        String formattedValue = df.format(input);

        if (formattedValue.equalsIgnoreCase("-0.0")) {
            formattedValue = "0.0";
        }

        System.out.println(formattedValue);
        return formattedValue;
    }

BolBol
13 авг. 2012, в 06:40

Поделиться

Я считаю, что -0 весьма полезен, потому что он сообщает вам, что округленное значение было фактически отрицательным (что может иметь большой смысл для некоторых функций). Единственная проблема для меня в том, что -1 * 0 на самом деле действительно 0 и должен быть отформатирован как 0, хотя это не с Java formatters.

Следующий форматтер позаботится об этом, без дорогостоящей стоимости манипуляции с String (особенно RegExps):

public static String formatWithoutMinusZeroIssue(double d, DecimalFormat yourFormatter) {
    if (d == 0) {
        return yourFormatter.format(0);
    } else {
        return yourFormatter.format(d);
    }
}

Это использует тот факт, что хотя -1 * 0 и 0 отформатированы по-разному, они равны.

jolivier
27 март 2017, в 14:28

Поделиться

Ещё вопросы

  • 0изменить формат даты в jquery на c # формат даты
  • 1Списки удваивают свое пространство в C #, когда им нужно больше места. В какой-то момент становится менее эффективным удвоить, скажем, 1024 до 2048?
  • 1Перевести Java выражение / формулу в Objective-C
  • 0Попытка иметь два отсчета JS на одной странице
  • 1Добавьте метки легенды для каждого значения Y ASP.NET/C#
  • 0ошибка утечки окна не решена после вставки данных в MySQL
  • 0Получить идентификаторы флажков, которые не отключены
  • 1Утечка памяти Android, без статических переменных
  • 0php выдает ошибку no no timezone при новой настройке
  • 1Как перенаправить на другую страницу с несколькими результатами в asp.net
  • 1Проверка, существует ли файл после его загрузки с сервера
  • 1Hello World в Elm с консолью / узлом
  • 1Как включить объект, который имеет общее свойство списка и свойство ссылочного типа в dapper?
  • 0Backbone.js — исключение ncaught: SyntaxError: Конструктор функции: не удалось скомпилировать функцию
  • 0SQL: объединить несколько таблиц
  • 1Отправка MMS в Android
  • 1ASP.NET MVC5 — проблема маршрутизации с последовательным идентификатором: ошибка 404 при длине идентификатора более 1 символа?
  • 0Как выполнить обновление директивы, когда отправленная на нее коллекция обновлена?
  • 1Заставить кнопку распознавать текст в JTextField
  • 0передача значения в SQL
  • 0Проблемы с реализацией итератора двусвязного списка
  • 0Как передать вызов динамического метода вместо статического в data-ng-click (т. Е. Хотите передать вызываемый метод вместо фиксированного метода delete ())
  • 0Переменная, переданная = в область видимости, не обязательна
  • 0Magento — Внутренняя ошибка сервера при внешнем запросе
  • 1Странная ошибка при загрузке файла с помощью Spring Web Flow
  • 0Откройте файл .doc, не указав путь к его приложению-обработчику C ++
  • 0JQuery DataTable fnUpdate не обновляет значения из источника объекта: Uncaught TypeError: Невозможно вызвать метод ‘fnSetData’ из неопределенного
  • 0Использование указателей и массивов для решения линейной системы
  • 0как проверить и ответить, когда пользователь выбрал опцию выпадающего
  • 1Ошибка Maven при использовании командной строки для выполнения Java-программы
  • 0Реализация развертывания и свертывания в представлениях Rails
  • 0scrollTop ()! == не работает
  • 0Как я могу получить «данные» из jQuery Ajax на стороне сервера?
  • 1Android WebView Масштабирование с использованием ScaleDetector
  • 0MySQL вычисляет разницу между значениями, где не между x и y
  • 0Ошибка символа внешних зависимостей Visual Studio
  • 0html / javascript: предотвращение очистки значения <input> при отправке формы
  • 0Ошибка памяти GDI + GetHBITMAP?
  • 0Подходящий способ написать математическую формулу
  • 1<form> отключил мой код JavaScript
  • 0Как установить цвет текста текстового поля при редактировании
  • 0Избегайте разметки
  • 1BorderPane скрывает нижнюю область, пока окно не развернуто
  • 1Как я могу получить текущий сериализатор / десериализатор RestSharp
  • 0PHP — Как использовать переменную суммы внутри цикла
  • 0Изменить вид просмотра-иона на каждой странице
  • 1Упростить вложенный код Python
  • 1исключение одновременной модификации для заданного итератора
  • 0Как сделать так, чтобы вкладки QTabWidget соответствовали размеру контейнера — Отрегулируйте его длину?
  • 0Как обрабатывать символьную строку UTF8 wxString

Проблема

Сегодня, во время программирования, менеджер по продукту неожиданно сказал мне, что после хранения всех сумм в два десятичных знака они были переданы на стойку регистрации. Некоторое время я не знал, что делать, поэтому нашел энциклопедию Baidu в классе DecimalFormat. Но при использовании этого класса произошла ошибка, ошибка выглядит следующим образом:

через Google Translate:Невозможно отформатировать данный объект как число
Дело не в этом предложении, а в том, почему данный объект нельзя отформатировать с помощью чисел.

Если вы преобразуете тип String в тип BigDecimal, вы не получите сообщение об ошибке:

Почему это происходит?

Объясните проблему

Посмотрев исходный код, DecimalFormat наследует абстрактный класс NumberFormat, NumberFormat наследует абстрактный класс Format, у каждого есть метод format, давайте посмотрим на метод format в классе Format:

public abstract StringBuffer format(Object obj,
                    StringBuffer toAppendTo,
                    FieldPosition pos);

Это не реализованный метод, мы щелкаем стрелку вниз слева от идеи, и появляется сцена, которая вас удивит:

Есть много классов, которые реализуют этот метод, и сегодня мы говорим о DecimalFormat, давайте взглянем на его метод реализации:

 @Override
    public final StringBuffer format(Object number,
                                     StringBuffer toAppendTo,
                                     FieldPosition pos) {
        if (number instanceof Long || number instanceof Integer ||
                   number instanceof Short || number instanceof Byte ||
                   number instanceof AtomicInteger ||
                   number instanceof AtomicLong ||
                   (number instanceof BigInteger &&
                    ((BigInteger)number).bitLength () < 64)) {
            return format(((Number)number).longValue(), toAppendTo, pos);
        } else if (number instanceof BigDecimal) {
            return format((BigDecimal)number, toAppendTo, pos);
        } else if (number instanceof BigInteger) {
            return format((BigInteger)number, toAppendTo, pos);
        } else if (number instanceof Number) {
            return format(((Number)number).doubleValue(), toAppendTo, pos);
        } else {
            throw new IllegalArgumentException("Cannot format given Object as a Number");
        }
    }

Вы обнаружите, что мы действительно нашли текст ошибки выше: throw new IllegalArgumentException («Cannot format given Object as a Number“);
Если вы знаете instanceof, вы поймете, является ли это экземпляром объекта определенного класса. Здесь много классов упаковки, нет класса String и пользовательских типов, поэтому будут ошибки. Следовательно, он не может интерпретировать форматированные данные типа String.

Не волнуйтесь, если вы получили ошибку, проверьте исходный код, чтобы разобрать ее. Я предлагаю вам использовать идею

Автор Сообщение

Заголовок сообщения: Cannot format given object as Date

СообщениеДобавлено: 04 май 2008, 15:11 

Не в сети

Зарегистрирован: 24 окт 2007, 16:24
Сообщения: 7
Карма: 0

Здравствуйте.

Проблема следующего характера:

При формировании отчета по IP телефонии, возникают следующие ошибки:

На вкладке «Сессии»: «Cannot format given Object as Date»

На вкладке «Детализация» при попытке сохранить отчет в любом виде или послать по электронной почте, письмо не приходит, а файл, куда происходит сохранение имеет размер 0 байт.

Только что обновился до последних версий по инструкции. Ничего не изменилось. Что посоветуете?

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения:

СообщениеДобавлено: 06 май 2008, 11:50 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Можете выложить ошибки из server.out?

Вернуться к началу

Профиль  

k41n

Заголовок сообщения:

СообщениеДобавлено: 06 май 2008, 12:28 

Не в сети

Зарегистрирован: 24 окт 2007, 16:24
Сообщения: 7
Карма: 0

Конечно! Рад, что кто-то откликнулся!

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения:

СообщениеДобавлено: 06 май 2008, 14:43 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Как я понял, у вас проблема с модулем Phone? Переместите тему в соответсвующую ветку. С ошибкой разбираемся.

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения:

СообщениеДобавлено: 06 май 2008, 14:51 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Какая версия Java сейчас? Попробуйте обновить.

Вернуться к началу

Профиль  

k41n

Заголовок сообщения:

СообщениеДобавлено: 07 май 2008, 12:21 

Не в сети

Зарегистрирован: 24 окт 2007, 16:24
Сообщения: 7
Карма: 0

Версия явы:

[root@onyx BGBillingServer]# cat server_start.sh

#!/bin/sh

cd ${0%${0##*/}}.

JAVA_HOME=/opt/java

./server.sh start[root@onyx BGBillingServer]# /opt/java/

bin/ db/ demo/ include/ jre/ lib/ man/ sample/

[root@onyx BGBillingServer]# /opt/java/bin/java -version

java version «1.6.0_04»

Java(TM) SE Runtime Environment (build 1.6.0_04-b12)

Java HotSpot(TM) Server VM (build 10.0-b19, mixed mode)

[root@onyx BGBillingServer]#

Тему прошу перенести, я сам не могу.

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения:

СообщениеДобавлено: 19 июн 2008, 16:27 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Проблема еще актуальна? Если да — кидайте ссш доступ в личку к серверу.

Вернуться к началу

Профиль  

Xo4yxa

Заголовок сообщения: Re: Cannot format given object as Date

СообщениеДобавлено: 13 окт 2011, 11:23 

Не в сети

Зарегистрирован: 28 сен 2011, 11:40
Сообщения: 60
Карма: 0

актуальна но у меня! версия 5.2

Информация о версии:

Клиент: вер. 5.2 сборка 735 от 13.10.2011 02:46:41
os:Mac OS X; java:Apple Inc., v.1.6.0_26
Сервер: вер. 5.2 сборка 889 от 13.10.2011 02:46:30
os:Linux; java:Sun Microsystems Inc., v.1.6.0_27

bill вер. 5.2 сборка 211 от 20.09.2011 13:55:37
npay вер. 5.2 сборка 145 от 21.09.2011 17:44:46
phone вер. 5.2 сборка 200 от 26.08.2011 16:05:22

_________________
Клиент: вер. 5.2 сборка 1027 от 27.08.2012 12:07:51
Сервер: вер. 5.2 сборка 1283 от 28.08.2012 11:38:39

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения: Re: Cannot format given object as Date

СообщениеДобавлено: 24 окт 2011, 18:37 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Ну выложите ваш server.out, server.error.log, там такие же ошибки?

Вернуться к началу

Профиль  

Я хочу изменить свой строковый числовой номер следующим образом 1 000 048,35, но мое исключение — Cannot format given Object as a Number Любая помощь в этом будет оценена по достоинству!

 Document document = convertStringToDocument(response.getBody());
 String error = Objects.requireNonNull(document).getElementsByTagName("status").item(0).getTextContent();
 NumberFormat nf = NumberFormat.getInstance(new Locale("sk", "SK"));
 String value = nf.format(Long.toString(Long.parseLong(Objects.requireNonNull(document)
                .getElementsByTagName("paramValue").item(0).getTextContent())/100));//here exception
 List<ValueItem> valueItems = new LinkedList<>();
 ValueItem balance = new ValueItem();
 balance.setKey("balance");
 balance.setName("Баланс");
 balance.setValue(value);
 valueItems.add(balance);
 additionalSuppliersReturn.setValueItems(valueItems);

1 ответ

String str = "1000048.35";
NumberFormat numberFormat = NumberFormat.getNumberInstance(new Locale("sk","SK"));
Number number = new BigDecimal(str);
System.out.println(numberFormat.format(number));

Проблема заключается в запятой, где вы не можете разделить ее на большое десятичное или двойное значение. Можно заменить точкой.

str = str.replace(",",".");

В простейшем решении вы можете использовать:

String str = "1000048,35";
System.out.println(NumberFormat.getNumberInstance(new Locale("sk","SK")).parse(str));

Окончательное решение :

    try {
        String str = "1000048,35";
        NumberFormat numberFormat = NumberFormat.getNumberInstance(new Locale("sk", "SK"));
        Number number = numberFormat.parse(str);
        System.out.println(numberFormat.format(number));
    } catch (ParseException e) {
        e.printStackTrace();
    }

Пример двойного

Double dbl = new Double("100004835");
System.out.println(dbl);
NumberFormat numberFormat = NumberFormat.getNumberInstance(new Locale("sk", "SK"));
BigDecimal bigDecimal = new BigDecimal(dbl);
bigDecimal = bigDecimal.divide(new BigDecimal(100));
System.out.println(numberFormat.format(bigDecimal));


0

Gurkan İlleez
22 Окт 2021 в 15:51

Перейти к контенту

Невозможно форматировать данный объект как число

Вопрос:

этот кусок кода меня бросает: невозможно форматировать данный объект как число

  private BigDecimal notional;

public String getNotional() {
System.out.println("notional:" + notional);
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.');
System.out.println("notional:" + notional);
String format = df.format(notional);
System.out.println("notional2:" + format);


if(notional!=null)
notional = new BigDecimal(df.format(notional));
return notional.toString();
}

Зачем?

   javax.el.ELException: /pages/emir/acknowledgedTransactions.xhtml @484,160 value="#{ackTxContractBean.firstleg.notional}":
java.lang.IllegalArgumentException: Cannot format given Object as a Number

условный: 2279713.86 условный2: 2.279.713,86

Лучший ответ:

Вероятно, потому что вы, возможно, передаете формат вместо строки.

Конструктор BigDecimal, на который вы нацеливаетесь, принимает строку (BigDecimal (String)). Ни один из методов DecimalFormat.format, похоже, не принимает строку. Просто создайте свой BigDeciamal, а затем отформатируйте, если потом. Какой тип в любом случае является условным.

Нашел эту тему, которая, кажется, делает то, что вы хотите.

The format() method of DecimalFormat is overloaded.

In the working case, you are invoking :

 public final String format(double number)

And in the failing case, you are invoking :

 public final String format (Object obj) 

The first method takes a very specific argument. It expects a double.

This is not the case of the second one, which the type accepted is very broad : Object and where so the check on the type passed is performed at runtime.

By providing a argument that is not a double but a String, the method invoked is the second one.

Under the hood, this method relies on the format(Object number, StringBuffer toAppendTo, FieldPosition pos) method that expects to a number argument that is an instance of the Number class (Short, Long, … Double):

@Override
public final StringBuffer format(Object number,
                                 StringBuffer toAppendTo,
                                 FieldPosition pos) {
    if (number instanceof Long || 
        number instanceof Integer ||                   
        number instanceof Short || 
        number instanceof Byte ||                   
        number instanceof AtomicInteger ||
        number instanceof AtomicLong ||
        (number instanceof BigInteger && ((BigInteger)number).bitLength () < 64)) {

        return format(((Number)number).longValue(), toAppendTo, pos);
    } else if (number instanceof BigDecimal) {
        return format((BigDecimal)number, toAppendTo, pos);
    } else if (number instanceof BigInteger) {
        return format((BigInteger)number, toAppendTo, pos);
    } else if (number instanceof Number) {
        return format(((Number)number).doubleValue(), toAppendTo, pos);
    } else {
        throw new IllegalArgumentException("Cannot format given Object as a Number");
    }
}

But it is not the case as you passed to it a String instance.

To solve the problem, either pass a double primitive as in the success case or convert your String into an instance of Number such as Double with Double.valueOf(yourString).
I advise the first way (passing a double) as it is more natural in your code that already uses double primitives.
The second one requires a additional conversion operation from String to Double.

Автор Сообщение

Заголовок сообщения: Cannot format given object as Date

СообщениеДобавлено: 04 май 2008, 15:11 

Не в сети

Зарегистрирован: 24 окт 2007, 16:24
Сообщения: 7
Карма: 0

Здравствуйте.

Проблема следующего характера:

При формировании отчета по IP телефонии, возникают следующие ошибки:

На вкладке «Сессии»: «Cannot format given Object as Date»

На вкладке «Детализация» при попытке сохранить отчет в любом виде или послать по электронной почте, письмо не приходит, а файл, куда происходит сохранение имеет размер 0 байт.

Только что обновился до последних версий по инструкции. Ничего не изменилось. Что посоветуете?

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения:

СообщениеДобавлено: 06 май 2008, 11:50 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Можете выложить ошибки из server.out?

Вернуться к началу

Профиль  

k41n

Заголовок сообщения:

СообщениеДобавлено: 06 май 2008, 12:28 

Не в сети

Зарегистрирован: 24 окт 2007, 16:24
Сообщения: 7
Карма: 0

Конечно! Рад, что кто-то откликнулся!

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения:

СообщениеДобавлено: 06 май 2008, 14:43 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Как я понял, у вас проблема с модулем Phone? Переместите тему в соответсвующую ветку. С ошибкой разбираемся.

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения:

СообщениеДобавлено: 06 май 2008, 14:51 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Какая версия Java сейчас? Попробуйте обновить.

Вернуться к началу

Профиль  

k41n

Заголовок сообщения:

СообщениеДобавлено: 07 май 2008, 12:21 

Не в сети

Зарегистрирован: 24 окт 2007, 16:24
Сообщения: 7
Карма: 0

Версия явы:

[root@onyx BGBillingServer]# cat server_start.sh

#!/bin/sh

cd ${0%${0##*/}}.

JAVA_HOME=/opt/java

./server.sh start[root@onyx BGBillingServer]# /opt/java/

bin/ db/ demo/ include/ jre/ lib/ man/ sample/

[root@onyx BGBillingServer]# /opt/java/bin/java -version

java version «1.6.0_04»

Java(TM) SE Runtime Environment (build 1.6.0_04-b12)

Java HotSpot(TM) Server VM (build 10.0-b19, mixed mode)

[root@onyx BGBillingServer]#

Тему прошу перенести, я сам не могу.

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения:

СообщениеДобавлено: 19 июн 2008, 16:27 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Проблема еще актуальна? Если да — кидайте ссш доступ в личку к серверу.

Вернуться к началу

Профиль  

Xo4yxa

Заголовок сообщения: Re: Cannot format given object as Date

СообщениеДобавлено: 13 окт 2011, 11:23 

Не в сети

Зарегистрирован: 28 сен 2011, 11:40
Сообщения: 60
Карма: 0

актуальна но у меня! версия 5.2

Информация о версии:

Клиент: вер. 5.2 сборка 735 от 13.10.2011 02:46:41
os:Mac OS X; java:Apple Inc., v.1.6.0_26
Сервер: вер. 5.2 сборка 889 от 13.10.2011 02:46:30
os:Linux; java:Sun Microsystems Inc., v.1.6.0_27

bill вер. 5.2 сборка 211 от 20.09.2011 13:55:37
npay вер. 5.2 сборка 145 от 21.09.2011 17:44:46
phone вер. 5.2 сборка 200 от 26.08.2011 16:05:22

_________________
Клиент: вер. 5.2 сборка 1027 от 27.08.2012 12:07:51
Сервер: вер. 5.2 сборка 1283 от 28.08.2012 11:38:39

Вернуться к началу

Профиль  

Администратор

Заголовок сообщения: Re: Cannot format given object as Date

СообщениеДобавлено: 24 окт 2011, 18:37 

Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93

Ну выложите ваш server.out, server.error.log, там такие же ошибки?

Вернуться к началу

Профиль  

Невозможно форматировать данный объект как число

Вопрос:

этот кусок кода меня бросает: невозможно форматировать данный объект как число

  private BigDecimal notional;

public String getNotional() {
System.out.println("notional:" + notional);
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.');
System.out.println("notional:" + notional);
String format = df.format(notional);
System.out.println("notional2:" + format);


if(notional!=null)
notional = new BigDecimal(df.format(notional));
return notional.toString();
}

Зачем?

   javax.el.ELException: /pages/emir/acknowledgedTransactions.xhtml @484,160 value="#{ackTxContractBean.firstleg.notional}":
java.lang.IllegalArgumentException: Cannot format given Object as a Number

условный: 2279713.86 условный2: 2.279.713,86

Лучший ответ:

Вероятно, потому что вы, возможно, передаете формат вместо строки.

Конструктор BigDecimal, на который вы нацеливаетесь, принимает строку (BigDecimal (String)). Ни один из методов DecimalFormat.format, похоже, не принимает строку. Просто создайте свой BigDeciamal, а затем отформатируйте, если потом. Какой тип в любом случае является условным.

Нашел эту тему, которая, кажется, делает то, что вы хотите.

5 ответов

Я не думаю, что есть способ сделать это только с DecimalFormat, но этот однострочный файл позаботится о проблеме:

formattedValue = formattedValue.replaceAll( "^-(?=0(.0*)?$)", "");

Он удаляет (заменяет на "") знак минус, если за ним следуют 0-n символов "0.00000...", поэтому это будет работать для любого аналогичного результата, такого как "-0", "-0." или "-0.000000000"

Вот несколько тестовых кодов:

public static void main(String[] args) {
    System.out.println(format(-0.023));
    System.out.println(format(12.123));
    System.out.println(format(-12.345));
    System.out.println(format(-0.123));
    System.out.println(format(-1.777));
}

public static String format(double number) {
    DecimalFormat df = new DecimalFormat("#,##0.0");
    df.setRoundingMode(RoundingMode.HALF_UP);
    String formattedValue = df.format(number);
    formattedValue = formattedValue.replaceAll("^-(?=0(.0*)?$)", "");
    return formattedValue;
}

Выход (как ожидалось):

0.0
12.1
-12.3
-0.1
-1.8

Bohemian
13 авг. 2012, в 08:25

Поделиться

Я думаю, что это было бы обходным путем, чтобы избежать -0.0. Используйте следующий код:

DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);       
df.setNegativePrefix(""); // set negative prefix BLANK
String formattedValue = df.format(-0.023);
df.setNegativePrefix("-"); // set back to - again
System.out.println(formattedValue);

Выход:

0.0

Nandkumar Tekale
13 авг. 2012, в 08:11

Поделиться

Попробуйте следующее: DecimalFormat df = new DecimalFormat("#,##0.0#;(#,##0.0#)");

В соответствии с Javadoc для DecimalFormat:

Паттерн DecimalFormat содержит положительный и отрицательный подшаблон, например, «#, ## 0.00; (#, ## 0.00)». Каждый подшаблон имеет префикс, числовая часть и суффикс. Отрицательный подшаблон является необязательным; если отсутствует, то положительный подшаблон с префиксом локализованного минуса знак (‘-‘ в большинстве локалей) используется как отрицательный подшаблон. Что «0,00» только эквивалентно «0,00; -0,00». Если есть явный отрицательный подшаблон, он служит только для указания отрицательного префикс и суффикс; количество цифр, минимальные цифры и другие характеристики все те же, что и положительный. Это значит что «#, ## 0.0 #; (#)» производит точно такое же поведение, как. «#, ## # 0,0; (#, ## # 0,0)»

Sujay
13 авг. 2012, в 06:34

Поделиться

Чтобы проверить, вычисленное value = «-0.0»
сделайте его равным «0.0»

и вы можете запрограммировать sushus как

public String getFormattedValue(String input) {
        DecimalFormat df = new DecimalFormat("#,##0.0");
        df.setRoundingMode(RoundingMode.HALF_UP);
        String formattedValue = df.format(input);

        if (formattedValue.equalsIgnoreCase("-0.0")) {
            formattedValue = "0.0";
        }

        System.out.println(formattedValue);
        return formattedValue;
    }

BolBol
13 авг. 2012, в 06:40

Поделиться

Я считаю, что -0 весьма полезен, потому что он сообщает вам, что округленное значение было фактически отрицательным (что может иметь большой смысл для некоторых функций). Единственная проблема для меня в том, что -1 * 0 на самом деле действительно 0 и должен быть отформатирован как 0, хотя это не с Java formatters.

Следующий форматтер позаботится об этом, без дорогостоящей стоимости манипуляции с String (особенно RegExps):

public static String formatWithoutMinusZeroIssue(double d, DecimalFormat yourFormatter) {
    if (d == 0) {
        return yourFormatter.format(0);
    } else {
        return yourFormatter.format(d);
    }
}

Это использует тот факт, что хотя -1 * 0 и 0 отформатированы по-разному, они равны.

jolivier
27 март 2017, в 14:28

Поделиться

Ещё вопросы

  • 0Итоги с подгруппами
  • 0Показать простой простой диалог jquery mobile поверх другого простого простого диалога jquery mobile
  • 1SqlDependency не работает событие, если имеются очереди и запрос действителен
  • 0Попытка заставить curl работать в c ++ linux и GDB
  • 0Пересвязать модели сервисного объекта
  • 0Пакет AWS Pear не работает для Macports php56
  • 0Утечки памяти в C ++ из-за статической переменной [duplicate]
  • 0преобразовать итерационную функцию в рекурсивную функцию
  • 0jquery Map () не работает над списком HTML
  • 0Безопасные / небезопасные проблемы загрузки jQuery CDN
  • 1Как разместить bottomAppBar в макете
  • 0Как определить некоторые переменные конфигурации
  • 0Codeigniter возвращает false из моделей
  • 0Ошибка подтверждения OpenCV для некоторых значений Pixal
  • 0Предоставление доступа нескольким пользователям к состоянию сеансов на AngularJs (JHipster Project)
  • 0Как хранить несколько рабочих писем, личных и т. Д. Для одного контакта в MySQL
  • 1ПИТОН Как сделать «ассоциативный массив»
  • 0Базовый калькулятор jQuery
  • 1Извлечение значений строк данных
  • 1FirebaseApp по умолчанию не инициализируется в процессе (Ошибка)
  • 0Результаты массива не отображаются при обращении к массиву. Как получить доступ к определенным значениям полей в этом массиве?
  • 0Как я могу перезагрузить один раз, используя window.location.reload?
  • 0Подсветка активных кнопок в HTML
  • 0Форма входа Symfony 2.3 не аутентифицируется
  • 0с помощью C ++ вы можете установить выходной каталог в поле ввода веб-страницы?
  • 1Как проверить, если одна дата за другой в Java?
  • 0jQuery: установить Xml Node в элемент DOM
  • 0Средняя цена по категориям SQL-запрос
  • 1Проверка значений NaN в кадре данных pandas со столбцами int8
  • 1Получить содержимое с помощью двух меток с помощью Casperjs
  • 0вернуть строку и избежать пустых полей внутри нее
  • 1AttributeError: у объекта ‘numpy.ndarray’ нет атрибута ‘getdraw’
  • 0Создать приложение Android AR с помощью плагина Unity-ARKit
  • 1Как условно покрасить ячейки Excel вывода в Python?
  • 0как посчитать запись в диапазоне дат вместе с ее критериями
  • 1заголовок («Content-Type»: «image / jpeg») для интерфейса Swagger.
  • 1Пандейские рассуждения о способе условного обновления нового значения из других значений в той же строке в DataFrame
  • 0Событие щелчка селектора jquery не запускается с угловым
  • 0Присвойте значение текстовому окну gridview, используя jquery
  • 0как предотвратить переход курсора на следующую строку в текстовой области с помощью jquery
  • 1Я пытаюсь добавить динамический заголовок в tablayout, но на основе этого заголовка я хочу отображать различные продукты
  • 0JQuery Searchbox IE9 проблема
  • 0Почему динамическое изменение мета-описания тега не меняет его?
  • 1Временно хранить данные в приложении с несколькими активностями, пока приложение не будет остановлено?
  • 1Элемент управления WinForms WebBrowser игнорирует реферер
  • 1Добавить пробел между виджетами WxPython
  • 0Как настроить позиции с использованием HTML в DW?
  • 0PHP строка для разделения массива
  • 0ajaForm возвращает неверный XML в responseXML
  • 0Angular SyntaxError: Неожиданный токен}

I’m new to Java and am running this code to display the contents of one table in my database(logs).
The function getData converts the ResultSet into a 2D string array and returns it. This funtion is working fine for all the other queries.
Also in my database TimeStamp is of Time Stamp type. Is that creating the problem?

package stock;

public class ViewTrans extends javax.swing.JFrame {


public ViewTrans() {
    initComponents();
    Login l=new Login();
    String uname=l.getUsername();
    dbconnect db=new dbconnect();
    String str[][]=db.getData("select SName,Amount,Value,TimeStamp,Operation,Brokerage from logs where UserName='"+uname+"'");
    for(int i=0;i<10;i++)

    {
        for(int j=0;j<5;j++)
        {
            ltable.setValueAt(str[i][j],i,j);

        }
    }
}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    ltable = new javax.swing.JTable();
    homebutton = new javax.swing.JButton();
    viewaccbutton = new javax.swing.JButton();
    viewcurrstockbutton = new javax.swing.JButton();
    ebutton = new javax.swing.JButton();
    jLabel1 = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    ltable.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null}
        },
        new String [] {
            "Company Name", "No of Shares", "Value of Share", "TimeStamp", "Operation", "Brokerage"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.String.class, java.lang.Integer.class, java.lang.Double.class, java.lang.Object.class, java.lang.String.class, java.lang.Double.class
        };

        public Class getColumnClass(int columnIndex) {
            return types [columnIndex];
        }
    });
    jScrollPane1.setViewportView(ltable);

    homebutton.setText("Home");
    homebutton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            homebuttonActionPerformed(evt);
        }
    });

    viewaccbutton.setText("View Account");
    viewaccbutton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            viewaccbuttonActionPerformed(evt);
        }
    });

    viewcurrstockbutton.setText("View Current Stock");
    viewcurrstockbutton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            viewcurrstockbuttonActionPerformed(evt);
        }
    });

    ebutton.setText("Exit");
    ebutton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            ebuttonActionPerformed(evt);
        }
    });

    jLabel1.setText("Your Transactions:");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(20, 20, 20)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jLabel1)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 497, javax.swing.GroupLayout.PREFERRED_SIZE)))
        .addGroup(layout.createSequentialGroup()
            .addGap(49, 49, 49)
            .addComponent(homebutton)
            .addGap(36, 36, 36)
            .addComponent(viewaccbutton)
            .addGap(28, 28, 28)
            .addComponent(viewcurrstockbutton)
            .addGap(33, 33, 33)
            .addComponent(ebutton))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap(13, Short.MAX_VALUE)
            .addComponent(jLabel1)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 191, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(45, 45, 45)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(viewaccbutton)
                .addComponent(viewcurrstockbutton)
                .addComponent(homebutton)
                .addComponent(ebutton))
            .addGap(82, 82, 82))
    );

    pack();
}// </editor-fold>                        

private void homebuttonActionPerformed(java.awt.event.ActionEvent evt) {                                           
   HomePage h=new HomePage();
   h.setVisible(true);
   dispose();
}                                          

private void ebuttonActionPerformed(java.awt.event.ActionEvent evt) {                                        
   dispose();
}                                       

private void viewcurrstockbuttonActionPerformed(java.awt.event.ActionEvent evt) {                                                    
   ViewStock vs=new ViewStock();
   vs.setVisible(true);
   dispose();
}                                                   

private void viewaccbuttonActionPerformed(java.awt.event.ActionEvent evt) {                                              
   ViewAccount h=new ViewAccount();
   h.setVisible(true);
   dispose();
}                                             


public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new ViewTrans().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton ebutton;
private javax.swing.JButton homebutton;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable ltable;
private javax.swing.JButton viewaccbutton;
private javax.swing.JButton viewcurrstockbutton;
// End of variables declaration                   
}

I get the following error:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Number
    at java.text.DecimalFormat.format(DecimalFormat.java:505)
    at java.text.Format.format(Format.java:157)
    at javax.swing.plaf.synth.SynthTableUI$SynthTableCellRenderer.configureValue(SynthTableUI.java:803)
    at javax.swing.plaf.synth.SynthTableUI$SynthTableCellRenderer.getTableCellRendererComponent(SynthTableUI.java:790)
    at javax.swing.JTable.prepareRenderer(JTable.java:5736)
    at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684)
    at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581)
    at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365)
    at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276)
    at javax.swing.JComponent.paintComponent(JComponent.java:778)
    at javax.swing.JComponent.paint(JComponent.java:1054)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JViewport.paint(JViewport.java:731)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5226)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1529)
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
    at javax.swing.JComponent.paint(JComponent.java:1040)
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
    at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
    at java.awt.Container.paint(Container.java:1967)
    at java.awt.Window.paint(Window.java:3877)
    at javax.swing.RepaintManager$3.run(RepaintManager.java:819)
    at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
    at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Понравилась статья? Поделить с друзьями:
  • Ошибка cannot find utcompiledcode record for this version uninstaller
  • Ошибка cannot change visible in onshow or onhide
  • Ошибка cannot call member function without object
  • Ошибка cannot find the fakeroot binary
  • Ошибка cannot be applied to given types