ASP.Net преобразование с использованием чисел с плавающей точкой - PullRequest
0 голосов
/ 07 июля 2011

В моем математическом приложении asp.net/C# есть проблема с преобразованием или неким типом приведения типов.Подрядчик написал некоторый код для вычисления относительной стандартной ошибки в сборке.Но когда я запускаю его, очевидно, что он работает неправильно.

Типы данных следующие:

        public double dSwx = 0.0, dSw = 100.0;
        public double dTx = 0.0, dTwn=0.0;
        public float fEstimateVal = 0.0F;       //  For Estimate Value, it should be same as Swx/Sw

        //i did a system.out on this in my web app and they came out as:
        //zeroDataCell.dSwx = 0.0;
        //zeroDataCell.dSw = 100.0;

        zeroDataCell.fEstimateVal = (float)(zeroDataCell.dSwx / zeroDataCell.dSw) * 100.0f;

       //so now zeroDataCell.fEstimateVal should be 0.0, but my code blows 
       //through the if statement below, is there some conversion problem? 
       //should i use EqualsTo?            


        if (zeroDataCell.fEstimateVal != 0.0f)
            zeroDataCell.fRse = zeroDataCell.fTwx / zeroDataCell.fEstimateVal * 100.0f;0

Почему fEstimateVal, который равен нулю, все еще проходит через цикл if?*

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Работа с числами с плавающей запятой / двойными числами - это всегда точная балансировка. Если вы хотите сравнить его с чистым 0, преобразуйте его в целое число и сравните после.

Или добавьте некоторые точные вещи, такие как

((int)(floatnumber * 100)) == 0.
1 голос
/ 07 июля 2011

Здесь нормально работает следующий код:

if (zeroDataCell.fEstimateVal != 0)
  zeroDataCell.fRse = zeroDataCell.fTwx / zeroDataCell.fEstimateVal * 100.0f;
...