예제 #1
0
파일: Util.cs 프로젝트: imclab/NtImageLib
        public static SignedFraction ToSignedFraction(double value)
        {
            if (value > Int32.MaxValue)
            {
                throw new OverflowException();
            }

            if (value < Int32.MinValue)
            {
                throw new InvalidCastException();
            }

            var   fraction    = new SignedFraction();
            Int32 denominator = 1;

            while (value - System.Math.Floor(value) != 0 && value < Int32.MaxValue && denominator < Int32.MaxValue)
            {
                value       *= 10;
                denominator *= 10;
            }

            if (value > Int32.MaxValue || denominator > Int32.MaxValue)
            {
                throw new OverflowException();
            }

            fraction.Numerator   = (Int32)System.Math.Floor(value);
            fraction.Denominator = denominator;
            return(fraction);
        }
예제 #2
0
파일: Util.cs 프로젝트: imclab/NtImageLib
        public static byte[] ToByte(SignedFraction value, Definitions.Endian endian)
        {
            var ret = new byte[8];

            Array.Copy(Util.ToByte(value.Numerator, 4, endian), 0, ret, 0, 4);
            Array.Copy(Util.ToByte(value.Denominator, 4, endian), 0, ret, 4, 4);
            return(ret);
        }