2015-12-04 4 views
0

Я пытаюсь округлить десятичные значения без успеха в C#.Как округлить от 0,005 до 3 десятичных макс в C#

Я должен округлить до 0,005 до нижнего. С возвратным значением 3 числа максимум после запятой.

Объясняю:

46,60501 должен возвращать =>46,605

46,09784 должен возвращать =>46,095

46,60434 должен возвращать =>46.600 (а не 46.605, потому что округлены!)

На самом деле я использую этот код в C# (проверьте комментарии для посмотреть, что случилось):

//Send '46.60501' return me '46.605' => Success 
double center_latitude_min_box = Math.Round((Math.Round(latitude * 200, MidpointRounding.AwayFromZero)/200),3); 

//Send '7.09784' return me '7.1' ?!? => No Success, and why only return 1 number after the comma ? 
double center_longitude_min_box = Math.Round((Math.Round(longitude * 200, MidpointRounding.AwayFromZero)/200), 3); 

, но это не работает хорошо: '(

Если кто-то может мне помочь, я буду очень Благодарю! Я начинаю сейчас, чтобы стать сумасшедшим ^^

+0

К сожалению @ P6345uk это не то же самое, я не хочу 1,246 возвращение 1.250. Но 1.245 –

+0

Это не округление, то – P6345uk

+0

да, округленное дно до 0,005 –

ответ

0

Что вы могли бы использовать что-то вроде

var x = 0; 
if((latitude*100) - Math.Truncate((latitude*100)) >=0.5) 
{ 
x = (Math.Truncate((latitude*100))/100)+0.005; 
} 
else 
{ 
x = (Math.Truncate((latitude*100))/100); 
} 

EDIT ***** решение EDIT Густава ниже намного лучше

Это действительно может быть производится непосредственно в одной строке:

x = Math.Floor (широта * 200)/200;

+0

оберните это в функцию, и это даст вам то, что вы хотите – P6345uk

1

Это действительно может быть сделано непосредственно в одной строке:

x = Math.Floor(latitude * 200)/200; 
+0

О, только что заметили ссылку выше - которая подтверждает ... – Gustav

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