Тип данных с двойной точностью усечения

У меня есть значения, хранящиеся в базе данных как 0,05 и 0,10. Я создаю список, используя код С#, чтобы получить эти значения в списке, используя:

foreach (var objST in obj.LstTerms)
{
     SubcriptionTermsModel objSubcriptionTerms = new SubcriptionTermsModel();
     objSubcriptionTerms.DiscountRate = objST.DiscountRate;
}

где DiscountRate имеет тип double. Но при создании списка значение 0,10 усекается до 0,1, которое я не могу сравнить, на мой взгляд. Пожалуйста, помогите мне с решением для этого.


person user3346478    schedule 24.02.2014    source источник
comment
0.10 и 0.1 численно эквивалентны; нет способа различить их. Ваша проблема, вероятно, возникает при создании строкового представления. Вам нужно указать, что вы хотите две десятичные цифры; например, используя num.ToString("F2").   -  person Douglas    schedule 24.02.2014
comment
0,10 == 0,1, по крайней мере, так было последние несколько сотен лет. Вы, вероятно, сравниваете строки в своем представлении, добавьте более подходящий код, включая схему вашей таблицы.   -  person Anri    schedule 24.02.2014
comment
На самом деле 0.1 не может быть представлено в double. Ближайшим double к 0.1 является 0.10000 00000 00000 00555 11151 23125 78270 21181 58340 45410 15625. Я думаю, вам нужно будет пересмотреть свои ожидания относительно того, что может сделать для вас двоичная плавающая точка.   -  person David Heffernan    schedule 24.02.2014


Ответы (1)


Как обсуждалось здесь

double не сохраняет незначащие цифры - нет никакой разницы между 1,5 и 1,50000, если речь идет о double.

Если вы хотите сохранить незначащие цифры, используйте вместо них десятичные числа. В любом случае, это может быть более подходящим для вас, в зависимости от вашего точного контекста. (У нас очень мало контекста, чтобы продолжать здесь...)

Таким образом, вы можете использовать этот decimal вместо double

person Arshad    schedule 24.02.2014