Странное Поведение JavaScript: Дополнение С плавающей точкой, дающее неправильный ответ [дубликат]

Добавьте этот метод в свой контроллер вида.

Swift :

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    if text == "\n" {
        textView.resignFirstResponder()
        return false
    }
    return true
}

Этот метод также может быть полезен для вас:

/**
Dismiss keyboard when tapped outside the keyboard or textView

:param: touches the touches
:param: event   the related event
*/
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    if let touch = touches.anyObject() as? UITouch {
        if touch.phase == UITouchPhase.Began {
            textField?.resignFirstResponder()
        }
    }
}
7
задан Community 23 May 2017 в 12:16
поделиться

3 ответа

Это связано с тем, как десятичные значения преобразуются в двоичные числа с плавающей запятой. 1/10 превращается в повторяющуюся десятичную дробь в двоичном формате, поэтому число не представляется полностью, и повторяющиеся операции могут выявить ошибку.

JavaScript использует числа с плавающей запятой IEEE-754 для записи. У некоторых других языков такая же проблема.

Как с этим бороться? В вашем случае, возможно, toPrecision () .

8
ответ дан 6 December 2019 в 19:41
поделиться

Часть мантиссы (часть после десятичной точки) чисел с плавающей запятой хранится как сумма дробей. Их вычисляют путем добавления ряда фракций. Порядок дробей следующий:

1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128, ... etc

Двоичное представление сохраняется как 0 и 1, что означает да / нет. Например, 001010 будет 0 * 1/2 + 0 * 1/4 + 1 * 1/8 + 0 * 1/16 + 1 * 1/32.

Это грубый пример того, почему числа с плавающей запятой не могут быть точно. По мере того, как вы добавляете точность (float -> double -> long double), вы получаете большую точность до предела.

Базовые хранимые двоичные данные делятся на две части - одна для той части, которая появляется перед десятичной точкой, а другая для части после запятой. Это стандарт IEEE , который был принят из-за скорости, с которой могут выполняться вычисления (и, возможно, других факторов). http://docs.sun.com/source/806-3568/ncg_goldberg.html

4
ответ дан 6 December 2019 в 19:41
поделиться

http://docs.sun.com/source/806-3568/ncg_goldberg.html

Что каждый должен знать о числах с плавающей запятой.

1
ответ дан 6 December 2019 в 19:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: