C # Double.ToString () неправильный результат - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь отобразить двойное значение, используя метод ToString ().значение 1,000000000000113., используя Double.ToString ("F16") результат 1.0000000000001100, используя Double.ToString ("F17") результат 1.00000000000011000

Я пробовал это с Double.ToString ("0.0000000000000000") результат 1.0000000000001100

* 1004Кажется, что ToString () устанавливает все числа дроби выше 14-го числа на ноль.

Я использую .Net 4.5.2.Как я могу решить эту проблему.

1 Ответ

0 голосов
/ 20 сентября 2018

A float и double числа с плавающей запятой ( IEEE 754 ) работают на Знак , Мантисса и Экспонент в base 2 просто так получается, что число 1.000000000000113 не вписывается в число base 2 .

Однако, у нас есть типы с плавающей запятой, которые делают работают на базе 10 (decimal), это имеет большую точность для рациональных чисел, но неиметь числовой диапазон

  • float приблизительный диапазон (±1.5 x 10^−45 до ±3.4 x 1038)
  • double приблизительный диапазон(±5.0 × 10^−324 до ±1.7 × 10308)
  • decimal приблизительный диапазон (±1.0 x 10^-28 до ±7.9228 x 1028)

Образец

double val = 1.000000000000113;
Console.WriteLine(val);
decimal val2 = 1.000000000000113m;
Console.WriteLine(val2);

Выход

1.00000000000011
1.000000000000113

Полная демонстрация здесь

...