C # преобразовать строку в один - PullRequest
2 голосов
/ 29 марта 2011

У меня есть программа, работающая некоторое время, и все работает нормально, пока не случится эта странная вещь. когда я конвертирую числовую строку в Single, я просто не могу получить желаемое значение. например:

Convert.ToSingle("11006.954") вернуть значение 11006.9541 Convert.ToSingle("20678.228") вернуть значение 20678.2285

Я знаю, что могу исправить это, используя Convert.ToDouble, но потребуется несколько дней, чтобы изменить существующую систему. Я использую vs2003 .net 1.1.

1 Ответ

10 голосов
/ 29 марта 2011

Вы, кажется, ожидаете, что Single сможет представлять точно числа, которые вы дали. Не может 11006,9541 является ближайшим значением Single к 11006,954. (На самом деле, точное значение ближайшего Single равно 11006.9541015625, но я подозреваю, что вы видите 11006.9541 в отладчике.)

Если вы хотите точного представления чисел, первоначально выраженных в десятичных числах, вы должны использовать System.Decimal.

См. Мои статьи о двоичной с плавающей запятой и десятичной с плавающей запятой в .NET для получения дополнительной информации.

...