2010-02-20 2 views

ответ

6

Вы не можете. Binary floating point не работает подобный. Вы можете указать формат в таком же порядке (например, используя "f4" в качестве строки формата), но если вы имеете дело со значениями, которые имеют натуральное число десятичных мест, то вместо этого вы, вероятно, должны использовать decimal. Не могли бы вы дать нам больше информации о том, что представляют ваши ценности?

+0

им делать равенство между 2 точками х х и там значения 5.0000 и 4.999999996 , и мне нужно, чтобы это было правдой –

+0

@ Басс: Если вы делаете только тест на равенство, то ответ благородца - это, вероятно, правильный путь. Я бы все же подумал, хотите ли вы вместо этого использовать десятичную дробь, но это зависит от того, какие значения у вас есть. –

3

Вы не можете установить количество цифр после точки на двойном напрямую.

Вы можете изменить строковое представление двойника, используя строку формата.

Одним из примеров может быть:

string.Format("{0:0.####}", number); 

Или, как Джон Скит указывает:

number.ToString("f4") 
2

Используйте это для сравнения двух чисел с плавающей точкой 4 цифр во фракции:

if (Math.Abs(a - b) < 1E-4) { 
    // close enough 
    //... 
    } 
+0

Если вы хотите быть абсолютно уверены, что они равны, то это должен быть Double.epsilon, а не 1e-4. Если вы хотите сказать, что они «достаточно близки» равны, то вы код в порядке – zebrabox

+0

Double.Epsilon не может работать как есть, он слишком мал. Правильный эпсилон - это что-то вроде * 1E-15, но его нужно увеличивать за ошибки, накопленные каждой операцией FP. –

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