c# – 将double转换为十进制

c# – 将double转换为十进制,第1张

概述我有从double到decimal的转换问题: public class CartesianCoordinates { public int LatitudeHours { get; set;} public int LatitudeMinutes { get; set; } public int LatitudeSeconds { get; 我有从double到decimal的转换问题:

public class CartesianCoordinates    {        public int LatitudeHours { get; set;}        public int LatitudeMinutes { get; set; }        public int LatitudeSeconds { get; set; }        public GeoDirectionLongtitude LongitudeDirection { get; set; }        public int LongitudeHours { get; set; }        public int LongitudeMinutes { get; set; }        public int LongitudeSeconds { get; set; }        public GeoDirectionLatitude LatitudeDirection { get; set; }    }public class DecimalCoordinates    {        public decimal Latitude { get; set; }        public decimal Longitude { get; set; }    }CartesianCoordinates CartesianCoordinates=new CartesianCoordinates(){LatitudeHours =12,LatitudeMinutes =34,LatitudeSeconds=56 }     converterDecimalCoordinates.Latitude = CartesianCoordinates.LatitudeHours + (CartesianCoordinates.LatitudeMinutes + (CartesianCoordinates.LatitudeSeconds / 60)) / 60;

我为什么得到12?我想要12,55

解决方法 作为我与DavID M和DanIElBrückner under this answer讨论的副产品以及我自己在 this answer by Adam下的部分错误陈述,很明显,很遗憾,所有答案都只是部分正确.这是怎么回事:

// example (all  x,y,z ar ints):Decimal d = x + y + z / 60M;// is left to right evaluated asDecimal d = x + y + (((Decimal) z) / 60M);// when doing addition,this is what happens when you add integers and something else:Decimal d = x + y + (int) (((Decimal) z) / 60M);// which will yIEld a truncated result.

结果是:只是在整个语句中添加60M或60.0,如has been suggested,将不会(或可能不)产生所需结果,具体取决于语句的执行顺序和/或加/减的存在,因为在OP的问题中的情况.

要解决这个问题,请遵循Adam的建议并将每个加/减步骤转换为小数,一直使用小数(不是很清楚)或将计算放在一个以小数为参数的小函数中,强制隐式转换:

Decimal GetDecimalLatitude(Decimal latitudeHours,Decimal latitudeMinutes,Decimal latitudeSeconds){    return latitudeHours + (latitudeMinutes + (latitudeSeconds / 60)) / 60;}

作为奖励,它更短,增加了可读性.使用以下语句调用此方法:

converterDecimalCoordinates.Latitude = GetDecimalLatitude(    CartesianCoordinates.LatitudeHours,CartesianCoordinates.LatitudeMinutes,CartesianCoordinates.LatitudeSeconds);
总结

以上是内存溢出为你收集整理的c# – 将double转换为十进制全部内容,希望文章能够帮你解决c# – 将double转换为十进制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225733.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存