Результаты с большим числом деления не верны [дубликат]

  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 (память, размер);  наконец, свободным;  конец;  конец;   
3
задан Yash Agarwal 26 September 2011 в 22:23
поделиться

3 ответа

В Python 3.x / означает деление с плавающей запятой и может давать небольшие ошибки округления. Используйте // для целочисленного деления.

ans = a // (b*c)
10
ответ дан Mark Byers 15 August 2018 в 18:53
поделиться

Попробуйте использовать целочисленное деление вместо float-деления.

>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> 15511210043330985984000000 // (479001600 * 6227020800)
5200300
4
ответ дан Ignacio Vazquez-Abrams 15 August 2018 в 18:53
поделиться

Ваша проблема (не используя целочисленную арифметику) была подметена под вашим ковром для вас 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

?

3
ответ дан John Machin 15 August 2018 в 18:53
поделиться
Другие вопросы по тегам:

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