Вы должны смотреть на this article о арифметике с плавающей точкой и .NET. Округление происходит из-за сочетания того, как число преобразуется в значение с плавающей запятой с двойной точностью и как оно отформатировано при печати, так как по умолчанию по умолчанию значение по умолчанию равно 15 десятичным знакам для удвоения, а ваш исходный номер содержит десятичное значение после 15-го числа.
Вы можете попробовать test2.ToString("0.000000000000000000000000")
, чтобы узнать, сможете ли вы высвободить из номера больше информации, но я сомневаюсь, что так будет.
+1: вот почему я получил 0.05000000000000001 в своем отладчике. – Peter
ОК, но почему это значение тогда отображается как 0,05 при сериализации? Спасибо –
Хороший вопрос: «вам обычно не показывают точный результат» -> почему бы и нет? Для форматирования вывода, нормально, я думаю, но в отладчике это может пригодиться, как показывает этот вопрос. – Peter