我正在尝试从2 GeoPoint
构建Decimal
。我面临的问题是GeoPoint构造函数需要E6格式的2个整数。因此,使用文字很容易:
GeoPoint point = new GeoPoint((int)61.54367E6, (int)-149.768E6);
但如果我的输入存储为Decimal
我该怎么办?
Decimal Latitude = 61.54367;
Decimal Longitude = -149.768;
答案 0 :(得分:4)
GeoPoint point = new GeoPoint((int)(Latitude * 1E6), (int)(Longitude * 1E6));
答案 1 :(得分:1)
您所谈论的“E6”格式是科学记数法。这就是浮点文字的写法。参见C#标准的§9.4.4.2(整数文字)和§9.4.4.3(真实文字):ISO / IEC 23270(信息技术 - 编程语言 - C#)。 ISO / IEC 23270及其兄弟ISO / IEC 23271描述了CLR,可从ISO免费获得PDF文件
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) ) ;
你做的没什么区别。同样的事情发生在幕后。
但是,您应该注意,转换为双精度可能会失去精确度。 decimal
以精确度换取范围(幅度);范围(幅度)的double
和float
交易精度。此外,如果转换的值无法表示为double
,则从decimal
到OverflowException
的转换会抛出decimal
。
以下任何值都将引发OverflowException
:
Double.NaN
Double.PositiveInfinity
Double.NegativeInfinity
Decimal.MinValue
Decimal.MaxValue