2015-02-03 2 views
1
float s = float.Parse("10499.9705314636"); 

Теперь s имеет значение 10499.97.плавающая точность теряется в float.Parse

Есть ли способ сохранить все цифры точности?

+0

Используйте 'double' или' decimal'. Десятичное число будет даже сохранять конечные нули, тогда как 'double' просто обеспечивает лучшую точность. Если вы имеете дело с деньгами, десятичное значение обязательно –

+0

Не использовать 'float', no. Поскольку [documented] (https://msdn.microsoft.com/en-us/library/system.single), 'float' имеет около 7 цифр точности. –

+0

Связано: http://stackoverflow.com/questions/8509442/net-parse-round-float-values ​​ – TobiMcNamobi

ответ

6

Вы можете посмотреть в difference between float, double, and decimal. Обратите особое внимание на разницу между двоичным кодом с плавающей запятой и десятичным числом с плавающей точкой. Тип десятичных данных, скорее всего, то, что вы ищете здесь, так как float не имеет достаточно значительных цифр для хранения числа, которое вы пытаетесь точно разобрать.

+1

OMG Я знаю это до сих пор. спасибо – keerthee

4

Попробуйте использовать тип данных с более высокой точностью, чем float, например double. Остальные цифры вашего значения отсекаются из-за размера типа float данных:

double s = double.Parse("10499.9705314636"); 
Console.WriteLine(s); 

Печать:

10499,9705314636

Смежные вопросы