将double四舍五入到c#

本文关键字:四舍五入 double | 更新日期: 2023-09-27 18:19:05

我想计算一个BorderControl到它所添加的网格的距离,但是以四舍五入的百分比表示。

我使用这个方法:

internal static tPosition GetControlTPosition(Border tempInnerControl, Grid tempOuterGrid)
    {
        tPosition tempTPosition = new tPosition();
        Point tempInnerControlCornerPoint = tempInnerControl.PointToScreen(new Point(0, 0));
        Point tempOuterGridCornerPoint = tempOuterGrid.PointToScreen(new Point(0, 0));
        //
        //Top Left Corner
        //Fist we calculate the Distance of the Top left Corners of both elements
        double distanceLeft = tempInnerControlCornerPoint.X - tempOuterGridCornerPoint.X;
        double distanceTop = tempInnerControlCornerPoint.Y - tempOuterGridCornerPoint.Y;
        //Then we set the percentage of our position accordingly
        tempTPosition.PositionLeft = (int)(((distanceLeft) * 100 / tempOuterGrid.ActualWidth));
        tempTPosition.PositionTop = (int)((distanceTop) * 100 / tempOuterGrid.ActualHeight);
        //
        // Bottom Right Corner
        //Now we calculate the distance of the bottom right corner to the outher grids bottom right corner
        double distanceRight =  (tempOuterGridCornerPoint.X + tempOuterGrid.ActualWidth) - (tempInnerControlCornerPoint.X + tempInnerControl.ActualWidth);
        double distanceBottom = (tempOuterGridCornerPoint.Y + tempOuterGrid.ActualHeight) - (tempInnerControlCornerPoint.Y + tempInnerControl.ActualHeight);
        tempTPosition.PositionRight = (int)((distanceRight)*100/tempOuterGrid.ActualWidth);
        tempTPosition.PositionBottom = (int)((distanceBottom) * 100 / tempOuterGrid.ActualHeight);
        return tempTPosition;
    }

我的问题是,BorderControl不断变大,这意味着有一个问题的百分比是低,我想这是因为我失去了精度。我怎样才能避免这种情况呢?

由于各种原因,我需要这些数字为整型。

tPosition = left,top,right,bottom = int

将double四舍五入到c#

在查找tempTPosition时很可能会失去精度,而不是像以前那样使用double,而是使用int,这会将值四舍五入为整数

//Then we set the percentage of our position accordingly
    tempTPosition.PositionLeft = (double)(((distanceLeft) * 100 / tempOuterGrid.ActualWidth));
    tempTPosition.PositionTop = (double)((distanceTop) * 100 / tempOuterGrid.ActualHeight);

对于PositionRight &PositionBottom