使用python进行了简单的方程组计算,得到的输出结果却不对,最后发现用%f输出的结果是正确的7,%d输出直接变成6了,不知道为什么会出现这种情况,正确的z=7。求各位解答
源代码:
import numpy as np
# '''
# 方程式:
# x + y + z = 26
# x - y = 1
# 2x - y + z = 18
# '''
W = np.array([[1,1,1],[1,-1,0],[2,-1,1]])
result = np.array([26,1,18])
# 求逆
W_inv = np.linalg.inv(W)
vxyz = np.dot(W_inv,result)
v = list(vxyz)
print('结果:')
print('x = %d' % v[0])
print('y = %d' % v[1])
print('z = %f' % v[2])
print('z = %d' % v[2])
print(W_inv)
四舍五入
用gpt整理了一下,你看一下就明白了
在Python中,字符串格式化可以使用占位符来表示要插入的变量或值的位置和格式。下面是一些常用的占位符及其用法:
%d
:表示插入一个整数值。例如:%d
% 10 将会输出 10。%s
:表示插入一个字符串值。例如:%s
% "Hello" 将会输出 "Hello"。%f
:表示插入一个浮点数值。例如:%f
% 3.14 将会输出 3.140000。%.nf
:表示插入一个带有固定小数位数的浮点数值。其中 n 是要保留的小数位数。例如:%.2f
% 3.14 将会输出 3.14。%x
、%X
:表示插入一个整数的十六进制表示。%x
使用小写字母表示,%X
使用大写字母表示。例如:%x
% 255 将会输出 ff。%o
:表示插入一个整数的八进制表示。例如:%o
% 8 将会输出 10。使用这些占位符进行格式化输出时,可以使用 %
运算符将值与占位符组合起来。例如:
name = "Alice"
age = 25
print("My name is %s and I am %d years old." % (name, age))
输出结果为:
My name is Alice and I am 25 years old.
在 Python 3.6 及之后的版本中,还引入了 f-string 等新的格式化字符串方式,可以更方便地进行字符串格式化。例如:
name = "Alice"
age = 25
print(f"My name is {name} and I am {age} years old.")
这将产生相同的输出结果。
right_answers: 盒图
问题的原因是数据类型的不匹配导致输出结果不正确。在Python中,%f用来格式化浮点数,%d用来格式化整数。当使用%d格式化一个浮点数时,Python会将其截断为整数。因此,在你的代码中,输出结果虽然是浮点数7,但使用%d格式化后,结果被截断为整数6。
为了得到正确的结果z=7,你需要将输出结果的数据类型修改为浮点数。你可以使用%.1f来格式化输出结果,其中的.1表示保留一位小数。这样,输出结果就会正确地显示为7。
以下是修改后的源代码:
z = 3 + 4
print("z = %.1f" % z) # 使用%.1f格式化输出结果
输出结果为:
z = 7.0
这样就得到了正确的结果z=7。