float s = float.Parse("10499.9705314636");
Теперь s
имеет значение 10499.97
.плавающая точность теряется в float.Parse
Есть ли способ сохранить все цифры точности?
float s = float.Parse("10499.9705314636");
Теперь s
имеет значение 10499.97
.плавающая точность теряется в float.Parse
Есть ли способ сохранить все цифры точности?
Вы можете посмотреть в difference between float, double, and decimal. Обратите особое внимание на разницу между двоичным кодом с плавающей запятой и десятичным числом с плавающей точкой. Тип десятичных данных, скорее всего, то, что вы ищете здесь, так как float не имеет достаточно значительных цифр для хранения числа, которое вы пытаетесь точно разобрать.
OMG Я знаю это до сих пор. спасибо – keerthee
Вместо этого вы должны использовать decimal
.
Попробуйте использовать тип данных с более высокой точностью, чем float
, например double
. Остальные цифры вашего значения отсекаются из-за размера типа float
данных:
double s = double.Parse("10499.9705314636");
Console.WriteLine(s);
Печать:
10499,9705314636
Используйте 'double' или' decimal'. Десятичное число будет даже сохранять конечные нули, тогда как 'double' просто обеспечивает лучшую точность. Если вы имеете дело с деньгами, десятичное значение обязательно –
Не использовать 'float', no. Поскольку [documented] (https://msdn.microsoft.com/en-us/library/system.single), 'float' имеет около 7 цифр точности. –
Связано: http://stackoverflow.com/questions/8509442/net-parse-round-float-values – TobiMcNamobi