Окружите значение к ближайшему целому числу в ОБНОВЛЕНИИ SQL

В моем предыдущем задании мы боролись с тем, чтобы заставлять наше богатое приложение UI нарисовать немедленно и гладко. Мы использовали стандартные средства управления .NET, пользовательские элементы управления и средства управления devexpress.

После большого поиска с помощью Google и использования отражателя я столкнулся с сообщением WM_SETREDRAW win32. Это действительно останавливает рисунок средств управления, пока Вы обновляете их и можете быть применены, IIRC к порождать/содержать панели.

Это - очень очень простой класс, демонстрирующий, как использовать это сообщение:

class DrawingControl
{
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);

    private const int WM_SETREDRAW = 11; 

    public static void SuspendDrawing( Control parent )
    {
        SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
    }

    public static void ResumeDrawing( Control parent )
    {
        SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
        parent.Refresh();
    }
}

существуют более полные обсуждения этого - Google для C# и WM_SETREDRAW, например,

Дрожание C#

Разметки Приостановки

И тем, кого это касается, это - подобный пример в VB:

Public Module Extensions
    
    Private Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Boolean, ByVal lParam As IntPtr) As Integer
    End Function

    Private Const WM_SETREDRAW As Integer = 11

    ' Extension methods for Control
    
    Public Sub ResumeDrawing(ByVal Target As Control, ByVal Redraw As Boolean)
        SendMessage(Target.Handle, WM_SETREDRAW, True, 0)
        If Redraw Then
            Target.Refresh()
        End If
    End Sub

    
    Public Sub SuspendDrawing(ByVal Target As Control)
        SendMessage(Target.Handle, WM_SETREDRAW, False, 0)
    End Sub

    
    Public Sub ResumeDrawing(ByVal Target As Control)
        ResumeDrawing(Target, True)
    End Sub
End Module

18
задан Community 10 January 2015 в 11:26
поделиться

4 ответа

Вы можете использовать функцию ceil , по крайней мере, в MySQL; эта часть кода SQL:

select ceil(45.01), ceil(45.49), ceil(45.99);

каждый раз будет получать "46".

Для вашего обновления, я бы сказал:

Update product SET price = ceil(45.01)


Кстати: В MySQL ceil является псевдонимом до потолка ; не уверен насчет других систем БД, поэтому вам, возможно, придется использовать ту или иную, в зависимости от используемой БД ...


Цитата из документации:

CEILING (X)

Возвращает наименьшее целочисленное значение не меньше, чем X.

И данный пример:

mysql> SELECT CEILING(1.23);
        -> 2
mysql> SELECT CEILING(-1.23);
        -> -1
25
ответ дан 30 November 2019 в 06:17
поделиться

Если вы хотите округлить, используйте функцию округления. Используйте функцию потолка, если вы хотите получить наименьшее целое число, немного большее, чем ваш аргумент.

Например: select round (843.4923423423,0) from dual дает вам 843 и

select round (843.6923423423,0) из dual дает 844

3
ответ дан 30 November 2019 в 06:17
поделиться

Попробуйте потолок ...

SELECT Ceiling(45.01), Ceiling(45.49), Ceiling(45.99)

http://en.wikipedia.org/wiki/Floor_and_ceiling_functions

14
ответ дан 30 November 2019 в 06:17
поделиться

Это зависит от сервера базы данных, но его часто называют чем-то вроде CEIL или ПОТОЛОК . Например, в MySQL ...

mysql> select ceil(10.5);
+------------+
| ceil(10.5) |
+------------+
|         11 | 
+------------+

Затем вы можете выполнить UPDATE PRODUCT SET price = CEIL (some_other_field);

2
ответ дан 30 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

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