Плавание Python - ул. - пускает в ход странность

Это вызывается ошибкой/функцией в буфере обмена Служб удаленных рабочих столов (и возможные другие вещи) и реализация.NET буфера обмена. Задержка открытия буфера обмена вызывает ошибку, которая обычно передает в нескольких миллисекундах.

решение состоит в том, чтобы попробовать многократно в цикле и промежуточном сне.

for (int i = 0; i < 10; i++)
{
    try
    {
        Clipboard.SetText(str);
        return;
    }
    catch { }
    System.Threading.Thread.Sleep(10);
} 
10
задан cs95 3 August 2017 в 00:54
поделиться

3 ответа

str (0,47000000000000003) give '0,47' и float ('0,47') может быть 0,46999999999999997 . Это связано с тем, как представлены числа с плавающей запятой (см. Статью wikipedia )

Примечание: float (repr (0.47000000000000003)) или eval (repr (0.47000000000000003) )) даст ожидаемый результат, но вы должны использовать Decimal , если вам нужна точность.

16
ответ дан 3 December 2019 в 18:33
поделиться

float (и double) не имеют бесконечной точности . Естественно, при работе с ними возникают ошибки округления.

3
ответ дан 3 December 2019 в 18:33
поделиться

Это FAQ по Python

Тот же вопрос довольно часто возникает также в comp.lang.python .

Я думаю, причина в Часто задаваемые вопросы заключаются в том, что, поскольку python совершенен во всех других отношениях ;-), мы ожидаем, что он будет отлично выполнять арифметические операции - точно так же, как нас учили в школе. Однако любой, кто прошел курс обучения численным методам, скажет вам, что числа с плавающей запятой очень далеки от совершенства.

Десятичное - хорошая альтернатива, и если вам нужно больше скорости и больше возможностей gmpy тоже отлично.

2
ответ дан 3 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

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