Объект броска к десятичному числу? (nullable десятичное число)

Решил проблему, изменив метод в модели:

public function get_posts_by_author($authorid) {
    $this->db->select('posts.*,categories.name as post_category');
    $this->db->order_by('posts.id', 'DESC');
    $this->db->join('categories', 'posts.cat_id = categories.id', 'inner');
    // the line below was changed
   $query = $this->db->get_where('posts', array('posts.author_id' => $authorid));
    return $query->result();
}
31
задан leppie 8 January 2016 в 20:57
поделиться

3 ответа

Распаковывание только работает, если тип идентичен! Вы не можете распаковать object, который не содержит целевое значение. То, в чем Вы нуждаетесь, является чем-то вроде

decimal tmpvalue;
decimal? result = decimal.TryParse((string)value, out tmpvalue) ?
                  tmpvalue : (decimal?)null;

, Это смотрит, parsable ли значение как decimal. Если да, то присвойте его result; еще присвойтесь null. Следующий код делает приблизительно то же и мог бы быть легче понять для людей, не знакомых с условным оператором ?::

decimal tmpvalue;
decimal? result = null;
if (decimal.TryParse((string)value, out tmpvalue))
    result = tmpvalue;
67
ответ дан 27 November 2019 в 21:50
поделиться

и если Вы используете decimal? temp = (decimal?)value;

2
ответ дан 27 November 2019 в 21:50
поделиться

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

decimal parsedValue;
decimal? temp = decimal.TryParse(value, out parsedValue)
                ? value
                : (decimal?)null;

Этот путь Вы избежите исключений при парсинге плохо форматированных строк.

Почти все типы примитивов предоставляют методы Синтаксического анализа и TryParse для преобразования из строки.

, также рекомендуется передать культуру для аргумента поставщика методу для предотвращения проблем с десятичным разделителем. Если Вы читаете из другой системы, CultureInfo. InvariantCulture является, вероятно, способом пойти (но это не значение по умолчанию).

bool TryParse(string s, NumberStyles style,
  IFormatProvider provider, out decimal result)
5
ответ дан 27 November 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: