add two double given wrong result

前端 未结 5 1105
被撕碎了的回忆
被撕碎了的回忆 2021-01-22 10:33

I\'m using the following piece of code and under some mysterious circumstances the result of the addition is not as it\'s supposed to be:

double _west = 9.482935         


        
5条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-22 11:19

    At first I thought this was a rounding error but actually it is your assertion that is wrong. Try adding the entire result of your calculation without any arbitrary rounding on your part.

    Try this:

    using System;
    
    class Program
    {
        static void Main()
        {
            double _west = 9.482935905456543;
            double _off = 0.00000093248155508263153;
            double _lon = _west + _off;
    
            // check for the expected result
            Console.WriteLine(_lon == 9.48293683793809808263153);       
        }
    }
    

    In the future though it is best to use System.Decimal in cases where you need to avoid rounding errors that are usually associated with the System.Single and System.Double types.

    That being said, however, this is not the case here. By arbitrarily rounding the number at a given point you are assuming that the type will also round at that same point which is not how it works. Floating point numbers are stored to their maximum representational capacity and only once that threshold has been reached does rounding take place.

提交回复
热议问题