SQL Server: Вычисление с числовыми литералами

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

При отладке он выглядел так, как будто метод onCreate () для PreferencesFragment вызывался дважды, когда содержимое дисплея вращалось. Это было уже достаточно странно. Затем я добавил проверку isAdded () вне блока, где он будет указывать на сбой, и это решило проблему.

Вот код слушателя, который обновляет сводку предпочтений, чтобы показать новую запись. Он находится в методе onCreate () моего класса Preferences, который расширяет класс PreferenceFragment:

public static class Preferences extends PreferenceFragment {
    SharedPreferences.OnSharedPreferenceChangeListener listener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // ...
        listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                // check if the fragment has been added to the activity yet (necessary to avoid crashes)
                if (isAdded()) {
                    // for the preferences of type "list" set the summary to be the entry of the selected item
                    if (key.equals(getString(R.string.pref_fileviewer_textsize))) {
                        ListPreference listPref = (ListPreference) findPreference(key);
                        listPref.setSummary("Display file content with a text size of " + listPref.getEntry());
                    } else if (key.equals(getString(R.string.pref_fileviewer_segmentsize))) {
                        ListPreference listPref = (ListPreference) findPreference(key);
                        listPref.setSummary("Show " + listPref.getEntry() + " bytes of a file at once");
                    }
                }
            }
        };
        // ...
    }

Я надеюсь, что это поможет другим!

10
задан VVS 2 July 2009 в 07:45
поделиться

2 ответа

SQL Server использует минимально возможный тип данных.

Когда вы запустите этот сценарий

SELECT SQL_VARIANT_PROPERTY(1.0, 'BaseType')
SELECT SQL_VARIANT_PROPERTY(1.0, 'Precision')
SELECT SQL_VARIANT_PROPERTY(1.0, 'Scale')
SELECT SQL_VARIANT_PROPERTY(1.0, 'TotalBytes')

, вы увидите, что SQL Server неявно использовал тип данных NUMERIC (2, 1).
При делении на 60,0 результат преобразуется в ЧИСЛО (8, 6).
Последнее вычисление преобразует результат в ЧИСЛО (17, 10).


Изменить

Взято из электронной документации по SQL Server Преобразование типов данных

В инструкциях Transact-SQL - константа с десятичной запятой автоматически преобразовано в числовое значение данных, используя минимальную точность и масштаб нужно. Например, постоянная 12,345 преобразуется в числовое значение с точностью до 5 и шкала 3.

10
ответ дан 3 December 2019 в 21:22
поделиться

Да, вам часто приходится бросать их, чтобы добиться большей точности. Мое мнение:

Для более точного приведения десятичных дробей перед вычислениями

4
ответ дан 3 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

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