Python, превратить числа с плавающей точкой в ​​целые числа - PullRequest
0 голосов
/ 08 июня 2018

Хорошо, я знаю, что этот вопрос часто задают, но часто ответы - это специальные решения.Я думаю, вы могли бы сказать, что я пытаюсь понять, почему это не будет работать в дополнение к тому, как заставить его работать.

# ---- Find Spring Rate ---- #
import math
import numpy as np
from pylab import plot, show, title, xlabel, ylabel, axis
import matplotlib as mpl
from matplotlib import pyplot as plt
'''
F = Load
D = mean dia of Coil
d = wire dia
Na = # of active coils
G = Shear Modulus 
'''
F = 30 #lbf   Assumed load 
D = 0.423 #in Measured 
d = 0.055 #in Measured
#N_a = 2.75 
G = 11.85*10**(6) #psi  # pg 526 Table 10-5 - Machine Theory Book
E = 29.0*10**(6) #psi   # pg 526 Table 10-5 - Machine Theory Book

X1 = []
Y1 = []

for N_a in range(1,6,0.025):
    y = (8*F*D**(3)*N_a)/(d**(4)*G) 
    k = (d**(4)*G)/(8*D**(3)*N_a)   
    K=(F//y)
    # print("N_a =", N_a)
    # print("y=", y)
    # print("k=", k)
    # print("K=", K)
    # print('\n')
    X1.append(N_a)
    Y1.append(k)

print("X1=", X1)
print("Y1=", Y1)

Когда я запускаю этот код, я получаю следующее

Spring_Rate_Mk1.py", line 25, in <module>
    for N_a in range(1,6,0.025):
TypeError: 'float' object cannot be interpreted as an integer

То, что я пробовал:

  1. np.arange () это работает, но дает мне такие значения для X

X1 = [1.0, 1.025, 1.0499999999999998, 1.0749999999999997, 1.0999999999999996, 1.1249999999999996, 1.1499999999999995, 1.1749999999999994, 1.19999999999994, 1.1999999999999993, 1.22499999999991992991992992991992992992991992992999

Я пробовал N_a = int (N), а также int почти во всех других местах, где я мог бы выразить это Я пытался изменить деление с / на //

разбивая уравнения на части

A = (d**(4)*G)
B = (8*D**(3)*N_a)
k = A/B

1 Ответ

0 голосов
/ 08 июня 2018

np.arange работает, вы просто видите представление с плавающей точкой.

И range не работает с шагом с плавающей запятой, но в вашем случае это легко исправить с самого начала& конечные точки на самом деле являются целыми числами.

Без arange вы можете использовать целочисленный диапазон и разделить значение, поскольку 1/0.025 равно 40, просто умножьте свои границы на 40 и примените деление сразу после этого.(используя 40.0 только для Python 2)

for N_a in range(40,240):
    N_a /= 40.0
    print(N_a)

печатает:

1.0
1.025
1.05
1.075
1.1
1.125
1.15
1.175
1.2
1.225
1.25
1.275
1.3
1.325
1.35

и т. д. .... Деление на кратное 10 и степень 2делает результат без ошибки представления.

...