英文:
How to find the lowest place value in a number
问题
我正在编写一个考虑百分比误差的程序,其中一件我想要做的事情是找到一个数字中的最小位数。
示例:
- 1000 的最小位数是 1
- 12.0 的最小位数是 0.1
- 3.1415 的最小位数是 0.0001
- 等等...
是否有内置函数可供使用,或者我可以编写一个简单的操作?
英文:
I am writing a program that takes percent errors into consideration and one thing I would like to be able to do is find the lowest-place value in a number.
Example:
1000 has the lowest place of 1
12.0 has the lowest place of 0.1
3.1415 has the lowest place of 0.0001
etc...
Is there a built-in function I could use or is there a simple operation I could write?
答案1
得分: 3
以下是代码部分的中文翻译:
无内置函数
但此函数能够找到您要查找的值。
def e_reformat(s_number: str) -> str:
try:
e_index = s_number.index("e")
except ValueError:
return s_number
e_number = int(s_number[e_index + 1 :])
prefix_number = s_number[:e_index].replace(".", "")
return f'0.{"0"*(-e_number-1)}{prefix_number}';
def lowest_place(number: float | str) -> str:
s_number = e_reformat(str(number).lower())
try:
dot_index = s_number.index(".")
except ValueError:
return "1";
after_dot = s_number[dot_index + 1 :]
return f"0.{'0' * (len(after_dot) - 1)}1";
测试:
>>> lowest_place(1000)
'1'
>>> lowest_place(12.0)
'0.1'
>>> lowest_place(3.1415)
'0.0001'
>>> lowest_place('1.00')
'0.01'
>>> 1.2e-9 == 0.0000000012, lowest_place(1.2e-9) == lowest_place('0.0000000012')
(True, True)
⚠️lowest_place(1.)
或 lowest_place('1.')
返回 0.1
。如果您期望值为 1
,请改用以下的 lowest_place
函数:
def lowest_place(number: float | str) -> str:
s_number = e_reformat(str(number).lower())
try:
dot_index = s_number.index(".")
except ValueError:
return "1";
after_dot = s_number[dot_index + 1 :]
if not after_dot:
return "1";
return f"0.{'0' * (len(after_dot) - 1)}1";
英文:
No builtin function
But this function is able to find the value you are looking for.
def e_reformat(s_number: str) -> str:
try:
e_index = s_number.index("e")
except ValueError:
return s_number
e_number = int(s_number[e_index + 1 :])
prefix_number = s_number[:e_index].replace(".", "")
return f'0.{"0"*(-e_number-1)}{prefix_number}'
def lowest_place(number: float | str) -> str:
s_number = e_reformat(str(number).lower())
try:
dot_index = s_number.index(".")
except ValueError:
return "1"
after_dot = s_number[dot_index + 1 :]
return f"0.{'0' * (len(after_dot) - 1)}1"
Tests:
>>> lowest_place(1000)
'1'
>>> lowest_place(12.0)
'0.1'
>>> lowest_place(3.1415)
'0.0001'
>>> lowest_place('1.00')
'0.01'
>>> 1.2e-9 == 0.0000000012, lowest_place(1.2e-9) == lowest_place('0.0000000012')
(True, True)
⚠️lowest_place(1.)
or lowest_place('1.')
returns '0.1'
. If you expect the value to be '1'
, use this lowest_place
function instead:
def lowest_place(number: float | str) -> str:
s_number = e_reformat(str(number).lower())
try:
dot_index = s_number.index(".")
except ValueError:
return "1"
after_dot = s_number[dot_index + 1 :]
if not after_dot:
return "1"
return f"0.{'0' * (len(after_dot) - 1)}1"
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论