2015-01-30 2 views
0

У меня есть переменная типа float с некоторым значением, и есть точка, в которой это значение передается переменной двойного типа, в этот момент значение в переменной float больше не является тем, что я см. в переменной двойного типа. Для того, чтобы этот пример легко следовать, я делаю это в ближайшее окно, чтобы произвести Что происходит:float to double change change value

(double)float.Parse ("-0.00146256") 

дает мне -0,001462560030631721

«-0,00146256» (в строке да) происхождение это значение, и его хранится в float с float.Parse(), где-то в коде, а затем в более поздней точке сбрасывается в double.

Почему значение переменной меняется на другую в двойной переменной и что я могу сделать, чтобы предотвратить это неточное поведение?

+6

использовать десятичные, если вы хотите точность –

+1

__No__. Значение десятичных цифр в строке: __not__ хранится в полях или в двойном. Они __приближены! Никакие десятичные значения, кроме степеней 2, не являются __storable__ в форматах двоичных чисел. – TaW

+0

@TaW Да, целые кратные (разумные) степени 2, если быть точными. Например, '0.8125' является представимым, потому что оно равно 13 (целое число) раз 2 ** (- 4). –

ответ

1

Как это должно работать. Microsoft говорит

This type is useful for applications that need large numbers but do not need precise accuracy. If you require very accurate numbers, consider using the Decimal data type.

можно заливать в десятичную, а затем дважды:

double d = (double)(decimal)float.Parse("-0.00146256"); 
+1

Почему не просто 'double.Parse (" - 0.00146256 ")' или 'decimal.Parse (" - 0.00146256 ")'? –

+0

Потому что автор хочет получить double от float, а не от строки. –

+0

О да ... Прошу прощения. Должен был прочитать весь вопрос. –