.NET проблема при использовании удваивается - PullRequest
1 голос
/ 08 марта 2011

В .NET, когда я вычитаю 1,35 из 1,35072, он показывает .000719999999.Как я могу получить .00072 при использовании double?

TOTKILO.Text = KILO.Text * TOUCH.Text * 0.01;    //here 1.35072
TextBox10.Text = TextBox9.Text * TextBox8.Text * 0.01; //here 1.35
K = Val(TOTKILO.Text) - Val(TextBox10.Text);  //here it shows 0.00719999

Ответы [ 3 ]

5 голосов
/ 08 марта 2011

Зависит от того, что вы действительно спрашиваете.

Если вы хотите округлить до пяти десятичных знаков, вы можете просто сделать:

double x = 1.35072;
double y = 1.35;
double z = Math.Round(x - y, 5); // 0.00072

Если, с другой стороны, вашцель состоит в том, чтобы всегда получать точные результаты от сложения / вычитания десятичных чисел, используя тип decimal вместо double, поскольку он по своей сути является типом base-10 (в отличие от типа base-2) и поэтому может представлять выраженные числав десятичной форме точно.

decimal x = 1.35072M;
decimal y = 1.35M;
decimal z = x - y; // 0.00072M
0 голосов
/ 08 марта 2011

Из того, что я видел, вам почти никогда не нужен double.Почти все время decimal (System.Decimal) работает для того, что вам нужно, и это точное число, а не представление с плавающей запятой, поэтому у вас никогда не возникнет этих проблем с округлением.

0 голосов
/ 08 марта 2011

Двойные числа и числа с плавающей запятой всегда представлены с разной степенью точности, чем мы их визуализируем.Всегда округляйте значения до нескольких десятичных знаков, а затем проверяйте ответы.

Дополнительные сведения приведены в Как работать с проблемами точности / сравнения с плавающей точкой .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...