function data64 (const filename: string): ansistring; // использует классы, IdGlobalProtocols, EncdDecd; const crlf = # 13 # 10; begin result: = ''; с TIdMimeTable.Create попытаться получить результат: = 'data:' + GetFileMIMEType (filename) + ';'; наконец, свободным; конец; с TMemoryStream.Create, попробуйте LoadFromFile (имя файла); result: = result + 'base64,' + crlf + EncodeBase64 (память, размер); наконец, свободным; конец; конец;
В Python 3.x /
означает деление с плавающей запятой и может давать небольшие ошибки округления. Используйте //
для целочисленного деления.
ans = a // (b*c)
Попробуйте использовать целочисленное деление вместо float-деления.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> 15511210043330985984000000 // (479001600 * 6227020800)
5200300
Ваша проблема (не используя целочисленную арифметику) была подметена под вашим ковром для вас Python 3.2:
Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200300.0
>>> repr(15511210043330985984000000 / (479001600 * 6227020800))
'5200300.0'
>>> int(15511210043330985984000000 / (479001600 * 6227020800))
5200300
Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> repr(15511210043330985984000000 / (479001600 * 6227020800))
'5200299.999999999'
>>> int(15511210043330985984000000 / (479001600 * 6227020800))
5200299
Я озадачен: предположительно вы использовали int()
, потому что поняли, что это создавая ответ float
. Почему вы не приняли (очевидный?) Следующий шаг округления, например
[3.1.3]
>>> int(round(15511210043330985984000000 / (479001600 * 6227020800)))
5200300
?