Почему Convert.ToDouble (string) округляется? - PullRequest
3 голосов
/ 22 октября 2008

Например, Convert.ToDouble ("0.1234567890123456789") = 0.123456789012346

Какое максимальное количество значащих цифр? Не удалось найти его в документах.

Ответы [ 4 ]

7 голосов
/ 22 октября 2008

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

3 голосов
/ 22 октября 2008

С MSDN :

Точность: 15-16 цифр.

2 голосов
/ 22 октября 2008

Если вы действительно хотите понять двоичное представление чисел с плавающей точкой, см. IEEE 754-1985 в Википедии.

По сути, это

sign * 1.mantissa * 2^(exponent - bias)

Количество битов, выделенных для полей мантиссы и экспоненты, определяет точность числа.

1 голос
/ 22 октября 2008

http://en.wikipedia.org/wiki/Double_precision

Двойной имеет только 64 бита хранения, и некоторые из них используются для знака и показателя степени, поэтому есть ограниченное количество цифр (обычно 15) для дробной части. Число с плавающей запятой имеет только 32 бита, поэтому 8-9 цифр точности. Кроме того, некоторые числа не могут быть точно представлены с помощью числа с плавающей запятой, поэтому в ваших конверсиях могут появляться ошибки округления.

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