2013-06-19 2 views
0

Я хочу вычислить расстояние BorderControl до Grid, в котором он добавлен, но в округленном проценте.Округление удвоений до int C#

Я использую этот метод:

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 продолжает становиться все больше, а это означает есть проблема с причем проценты к низкому уровню, я предполагаю, что это происходит потому, что я потерять точность. Как я могу избежать этого?

Мне нужны цифры как int, по разным причинам.

tPosition только слева, сверху, справа, снизу, как Интс

+0

Хм, ш Вы делаете что-то подобное? Не было бы лучше, если бы это было обработано стандартным механизмом WPF? – DHN

+0

im, пишущий редактор для чего-то, в нем вы можете перетаскивать изображения на фоне, эти рисунки устанавливаются в процентах к общему фону (внешняя сетка) для масштабируемости. Теперь этот метод вызывается после того, как изображение было перемещено, поэтому я могу получить его позицию, и я не знаю лучшего способа получить позицию и преобразовать ее в процентах. – Master117

ответ

1

Вы, скорее всего, потеряете вашу точность при поиске tempTPosition, вместо того, чтобы использовать двойной, как вы были вы используете 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

+0

«Я хочу вычислить расстояние BorderControl до Grid, в котором он добавлен, но в округленном проценте». Но мне нужны значения как полные числа, ints. Удваивается больше проблем, я знаю, что я теряю в этот момент, поэтому я хочу округлить их. Но у меня проблема, что она становится меньше с обеих сторон. – Master117

+0

Например, мой внутренний контроль был в 5,5,5,5 в начале. Теперь я перетаскиваю его немного вверх/влево, используя этот метод, чтобы получить его новый процент и получить: 2,2,7,7, который не складывается. Это должно быть 3,3,7,7 или 2,2,8,8. – Master117

+0

Возможно, вам придется совершить эту жертву точности, используя int, если вы изо всех сил пытаетесь преобразовать. Вы теряете точность при преобразовании двух разных типов. Другое, что у меня мало подсказки, я совершенно новичок в программировании. – DBull

Смежные вопросы