Недавно я придумал небольшую проблему в ios swift при преобразовании Double to Int.Strange Convertion double to int
var myDoubleValue: Double = 10.2
var newInt = Int(myDoubleValue * 100) //1019
Там я умножая 10.2 на 100 и не получить ожидаемого значения (1020) и вместо 1019 ...
Но работает правильно в большинстве случаев следующим
var myDoubleValue: Double = 10.3
var newInt = Int(myDoubleValue * 100) //1030
Кроме того, я также проверил его с Java и тем же вопросом там.
double myDoubleValue = 10.2;
int myIntValue1 = (int)(myDoubleValue * 100); //1019
Я мог бы преодолеть Проблема при выполнении «круглого», прежде чем обращенный к Int следующим ...
var myDoubleValue: Double = 10.2
var newInt = Int(round(myDoubleValue * 100)) //1020
Но это идет к чему-то я не хочу, если значение с 3 знаками после запятой, как следует, потому что это округление в то время (10,206 ---> 1021)
Во-первых, отображаемое значение как раз то, что не все значения, используйте форматирование, чтобы увидеть больше цифр. Во-вторых, 10.2 или 10.3 не могут быть точно представлены в номере с плавающей запятой base2, поэтому результаты могут быть очень немного отличающимися от ожидаемых. В-третьих, это может помочь, если вы потратили некоторое время на изучение чисел с плавающей запятой. – zaph
Сильно связано: [Является ли математика с плавающей запятой?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –