将double转换为十进制

use*_*618 3 c# decimal

我有从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;
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*d M 9

你的所有计算都是整数,并且是四舍五入的(更准确地说,是截断的).尝试用60m强制小数计算替换60的文字值,或60.0强制进行双重计算(在这种情况下,您需要在结尾处转换为小数).

  • 只需注意,值不会在预期意义上舍入 - 更多截断.对于int,1.99将强制转换为1. (4认同)

Dan*_*ner 7

Int32 x = 10;

Decimal y = x / 4;  // Performs an integer devision - result is 2.0
Decimal z = x / 4M; // Performs a decimal devision - result is 2.25
Run Code Online (Sandbox Code Playgroud)

如果两个操作数都是整数,则得到整数分割.通过将后缀添加M到数字,您可以明确声明该数字应解释为十进制数,因此您将获得十进制数.