c# – 将double转换为十进制
发布时间:2020-12-15 20:01:56 所属栏目:百科 来源:网络整理
导读:我有从double到decimal的转换问题: public class CartesianCoordinates { public int LatitudeHours { get; set;} public int LatitudeMinutes { get; set; } public int LatitudeSeconds { get; set; } public GeoDirectionLongtitude LongitudeDirection
我有从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 as Decimal 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |