Учебное руководство Python имеет приложение, названное Арифметика С плавающей точкой: Проблемы и Ограничения . Считайте его. Это объясняет, что происходит и почему Python прилагает все усилия. Это имеет даже пример, который соответствует Вашему. Позвольте мне заключить немного в кавычки:
>>> 0.1 0.10000000000000001
можно испытать желание использовать эти
round()
функция для прерывания его назад к единственной цифре, которую Вы ожидаете. Но это не имеет никакого значения:>>> round(0.1, 1) 0.10000000000000001
проблема состоит в том, что двоичное значение с плавающей точкой, сохраненное для
“0.1”
уже, было самым лучшим двоичным приближением к1/10
, таким образом пробуя к раунду, это снова can’t делает его лучше: это было уже столь хорошо, как это добирается.Другое последствие - то, что с тех пор
0.1
не точно1/10
, суммирование десяти значений0.1
не может уступить точно1.0
, также:>>> sum = 0.0 >>> for i in range(10): ... sum += 0.1 ... >>> sum 0.99999999999999989
Одна альтернатива и решение Ваших проблем использовали бы decimal
модуль.
На сайте компании представлены три примера: один сжимает pdf-файл с 9,1 МБ до 133 КБ. Открытие их с помощью Блокнота показывает одно изображение размером 2500x3000, в основном черное, сжатое с помощью FlateDecode, преобразованное в изображение того же размера, сжатое с помощью JPEG2000. Такая степень сжатия, вероятно, лучший сценарий. Два других примера более разумны; 741–349 КБ и 940–804 КБ. Они также включают снимок экрана с настройками; один проверенный во всех трех примерах содержит предупреждение: "ОЧЕНЬ МЕДЛЕННО !!!" Хотя, похоже, хороший продукт. Он делает все правильные вещи, включая веб-оптимизацию.
10% оригинала маловероятны, если только ваши файлы pdf ' содержимое известно заранее, много изображений, и вы вручную кодируете решение с помощью iTextSharp, чтобы воспользоваться преимуществами способа объединения PDF-файлов.
Если вам нравится, как работает ваш компонент, и он не является потокобезопасным, почему бы просто не создать с ним 10 отдельных процессов? Если у вас много больших изображений, будьте осторожны с ошибками нехватки памяти.