Я думаю, что здесь был дан ответ на главный вопрос, но я вынужден добавить что-то для раздела вопроса, в котором говорится, что это работает.
_AccelLimit = (float) (double) упражнение ["DefaultAccelLimit"];
Причина, по которой это «работает», и причина, по которой он «не чувствует себя правильным», заключается в том, что вы понижаете удвоение до числа с плавающей точкой со второго броска (тот, что слева), так что вы теряете точность и эффективно говорите компилятор, что можно усечь возвращенное значение.
На словах эта строка гласит ...
Получить объект (в данном случае он содержит двойное число)
Приведите объект в удвоение (теряя всю обертку объекта)
Бросьте двойное число в число с плавающей точкой (потеря точной точности двойного)
например. Если значение сказать
0,0124022806089461
и вы делаете выше, то значение AccelLimit будет
0.01240228
так как это степень того, что float в c # может получить из значения double.
Это опасная вещь, и я почти уверен, что это тоже усечение, а не округление, но кто-то может захотеть подтвердить это, поскольку я не уверен.