==Decimal的构造器传参:==
在Python中,Decimal
类的构造器可以接受多种类型的参数,包括但不限于:
- 字符串(str):这是最常见的用法之一,特别是当你想要确保数值以精确的十进制形式被解析时。字符串应该表示一个有效的十进制数,可以包含小数点、正负号以及科学计数法(如
+1.23400E-03
)。 - 浮点数(float):虽然可以这样做,但通常不推荐,因为浮点数可能由于其二进制表示而包含不精确的值。
- 整数(int):直接表示一个精确的十进制整数。
from decimal import Decimal, getcontext
getcontext().prec = 50
a = Decimal(input())
a = "{:f}".format(a)# 若这么写会报错(多加了一个点):a = "{:.f}".format(a)
print(a)
如果不采用以上方式来写(如果你想不到Decimal还可以把科学计数法(如+1.23400E-03
)当做构造器的参数传入),那么把本题当做字符串处理来做
首先分三种情况
- e > 0
小数点向右移e次
- e < len(dot_right)
-
e >= len(dot_right)
-
e < 0
小数点向左移e次
- e == 0
直接输出print(dot_left + '.' + dot_right)
s = input()
sign = s[0] # 符号
s = s[1:] # 将符号去掉
dot_left = s.split('.')[0] # 小数点左边的部分
dot_right = s.split('.')[1].split('E')[0] # 小数点右边并且E左边的部分
e_sign = s.split('.')[1].split('E')[1][0]
e = int(s.split('.')[1].split('E')[1][1:])
if sign == '-':
print(sign, end='')
if e_sign == '+':
# 如果e_sign == '+',那么小数点向后移动e次
# 要分两种情况讨论
if e < len(dot_right):
print(f"{dot_left}{dot_right[:e]}.{dot_right[e:]}")
else:
print(f"{dot_left}{dot_right}" + '0' * (e - len(dot_right)))
else:
if e == 0:
print(dot_left + '.' + dot_right)
else:
print("0." + '0' * (e - 1) + dot_left + dot_right) # 小数点向前移动e次