Целочисленная/круглая проблема в получении суммы из 3 разных чисел

#python #python-3.x #math #numbers #rounding

Вопрос:

 a = 1541
b = 1575
c = 1512
# I want to ratio the sum of these numbers to 128

total = a   b   c

rounded_a = round(a*128/total) # equals 43
rounded_b = round(b*128/total) # equals 44
rounded_c = round(c*128/total) # equals 42

total_of_rounded = rounded_a   rounded_b   rounded_c # equals 129 NOT 128

# I tried the floor

floor_a = math.floor(a*128/total) # equals 42
floor_b = math.floor(b*128/total) # equals 43
floor_c = math.floor(c*128/total) # equals 41

total_of_floor = floor_a   floor_b   floor_c # equals 126 NOT 128

# The exact values
# a: 42.62057044
# b: 43.56093345
# c: 41,81849611
 

Вопрос в том, как я могу достичь общего числа 128?

Примечание: я должен останавливаться на целых, а не на плавающих числах. Примечание 2: Я могу написать функцию коррекции, которая, например, добавляет 1 к общему числу, но мне это кажется неправильным.

Комментарии:

1. Итак, ваш желаемый результат-три целых числа a, b и c с суммой 128 и с теми же соотношениями, что и ваши исходные числа? В целом это кажется невозможным без гарантии того, что a b c делится на 128. Какими должны быть выходные данные с исходными числами a=128, b=1, c = 0?

Ответ №1:

Возможность: округлите a и b опустите, затем добавьте недостающие части c .

 a = 1541
b = 1575
c = 1512
total = a   b   c  # 4628

ra = a * 128 // total
rb = b * 128 // total
rc = (c * 128   (a * 128)%total   (b*128)%total) // total

print(ra,rb,rc)
# (42, 43, 43)
print(ra rb rc)
# 128
 

Комментарии:

1. Спасибо, кажется, это работает в этой ситуации, но может ли общее число иногда превышать 128 с разными значениями? Могу я как-нибудь получить 129?

2. @Rictrunks Я почти убежден, что общее количество не может превышать 128, но сегодня днем очень жарко, и я сейчас не могу ясно мыслить.

3. Я подтверждаю, что он никогда не превышает 128. Я написал цикл for со случайными значениями, и он никогда не превышает 128. Еще раз спасибо 🙂

Ответ №2:

Это правильный путь для этого:

 a = 1541
b = 1575
c = 1512
# I want to ratio the sum of these numbers to 128

total = a   b   c

total_of_round = round((a*128/total) (b*128/total) (c*128/total))
print (total_of_round)
 

Выход:
128

Комментарии:

1. у вас есть плавающий номер, но я не даю понижающего голоса

2. Если ему не нужно число с плавающей запятой, то это невозможно с предоставленными значениями a b и c до тех пор , пока все не будут делимы на 128. Не уверен, почему и как я получил понижающий голос

3. здесь, когда вы не обращаете внимания на вопрос ОП, вы опускаетесь ниже. ОП говорит Note: I should stay at integer, not floating numbers. , но я вообще никого не опускаю