如何将十进制转换为int E6

时间:2012-02-25 00:01:34

标签: c# xamarin.android

我正在尝试从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;

2 个答案:

答案 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以精确度换取范围(幅度);范围(幅度)的doublefloat交易精度。此外,如果转换的值无法表示为double,则从decimalOverflowException的转换会抛出decimal

以下任何值都将引发OverflowException

  • Double.NaN
  • Double.PositiveInfinity
  • Double.NegativeInfinity
  • 值小于Decimal.MinValue
  • 值大于Decimal.MaxValue