如何将Decimal转换为int E6

本文关键字:int E6 转换 Decimal | 更新日期: 2023-09-27 18:25:40

我正试图从2个Decimal构造一个GeoPoint。我面临的问题是GeoPoint构造函数需要E6格式的2 int。因此,使用文字很容易:

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

但是,如果我的输入存储为Decimal,我该怎么办?

Decimal Latitude = 61.54367;
Decimal Longitude = -149.768;

如何将Decimal转换为int E6

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

您所说的"E6"格式是科学记数法。这就是浮点文字的书写方式。请参阅§9.4.4.2(Integer Literals)和§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) ) ;

你做什么没有区别。同样的事情也会发生在幕后。

不过,您应该注意,在转换为double时可能会丢失精度。decimal以范围(量级)换取精度;CCD_ 8和CCD_。此外,如果正在转换的值不能表示为decimal,则从doubledecimal的转换将抛出OverflowException

以下任何值都将抛出OverflowException:

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