2012-02-25 1 views
1

Я пытаюсь построить GeoPoint от 2 Decimal. Проблема, с которой я сталкиваюсь, заключается в том, что конструктор GeoPoint ожидает 2 ints в формате E6. Так буквенные легко:Как отделить десятичное число от int E6

GeoPoint point = new GeoPoint((int)61.54367E6, (int)-149.768E6); 

Но если мои входы хранятся в виде Decimal что мне делать?

Decimal Latitude = 61.54367; 
Decimal Longitude = -149.768; 

ответ

4
GeoPoint point = new GeoPoint((int)(Latitude * 1E6), (int)(Longitude * 1E6)); 
+0

совершенный. Спасибо много. –

+0

Добро пожаловать :) –

1

Формат "E6" вы говорите о том, научной нотации. Это то, как написаны литералы с плавающей запятой. См. § 9.4.4.2 (Целочисленные литералы) и § 9.4.4.3 (настоящие литералы) стандарта C#: ISO/IEC 23270 (Информационные технологии — Языки программирования — C#). ISO/IEC 23270 и его брат, ISO/IEC 23271, описывающий CLR, свободно доступны в PDF-файлы из ISO на

http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html

Но все, что вам нужно сделать, это бросить свои decimal значения double

new GeoPoint((double) latitude , (double) longitude) ; 

Или, как вариант, использовать статический метод Decimal.ToDouble():

new GeoPoint(Decimal.ToDouble(latitude) , Decimal.ToDouble(longitude)) ; 

не дает никаких DIF которые вы делаете. То же самое происходит под обложками.

Следует отметить, что вы можете потерять точность при преобразовании в двойное. decimal диапазон торгов (величина) для точности; double и float Точность торговли для диапазона (величины). Кроме того, преобразование с double в decimal будет вызывать OverflowException, если преобразованное значение не может быть представлено как decimal.

Любое из следующих значений выбросит OverflowException: значения

  • Double.NaN
  • Double.PositiveInfinity
  • Double.NegativeInfinity
  • менее Decimal.MinValue
  • значений больше, чем Decimal.MaxValue
+0

Благодарим за дополнительную информацию Николас –

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

  • Нет связанных вопросов^_^