javascript – Python计算有效数字
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Python计算有效数字,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3127字,纯文字阅读大概需要5分钟。
内容图文
![javascript – Python计算有效数字](/upload/InfoBanner/zyjiaocheng/776/1bc6fb619215470c96ebb1255e9fddbb.jpg)
我将这个问题标记为javascript,因为即使我目前用Python编写它,如果在Javascript中实现起来更容易,我可以在Javascript中轻松实现它.
我的任务是为化学系做一个重要的数字计算检查.这意味着学生将他们的数据输入到字段中,网络应用程序将在他们的字段上执行预定义的操作并跟踪重要数字并查看他们的答案是否具有适当数量的有效数字.
当我把问题分解为我认为是一个很好的工作流程时,我意识到我需要一种方法来处理Python(后端,因为这是一个用Django制作的Web应用程序)或Javascript(因为你可以随时验证它前端没问题)确定有效位数.我做了一点研究,遇到了this question告诉我,我需要使用python字符串而不是浮点数.我目前的python代码感觉几乎完整,但我仍然面临着一个重大挑战
import re
def find_sigfigs(x):
# change the 'E' to lower case if the student typed it in as uppercase
x = x.lower()
if ('e' in x):
myStr = x.split('e')
# this function assumes that the number on the left of the 'e' is
# the number of sigfigs. That would be true for user input but not
# true when python converts a float to scientific notation
return len( (re.search('[0-9]+', myStr[0])).group() )
else:
# put it in e format and return the result of that
### problem: python makes me hard code the number of sigfigs as '2'
### without the 2 there it always defaults to 6
return find_sigfigs('%.*e' %(2,float(x)))
>>> find_sigfigs('1.3e-4')
>>> 2
>>> find_sigfigs('1234')
>>> 3
>>> find_sigfigs('123456')
>>> 3
>>> find_sigfigs('1.2345e3')
>>> 5
然后没有2
return find_sigfigs('%.e' %(float(x)))
#Because it changes it to 1.234000e3
>>> find_sigfigs('1234')
>>> 7
#Because it changes it to 1.234560e5
>>> find_sigfigs('123456')
>>> 7
所以简单地说,我的问题是,当学生没有明确宣布时,我需要一种简单的方法来计算sigfigs(也就是当它是科学记数法时).是否有一些简单的方法,我可以在’e’之前删除每个零,直到它达到第一个非零数字.我想,我需要从拆分字符串的后面开始并删除零,直到它变为非零数字?
编辑:所以经过一点点摆弄,我希望这是一个适当的解决方案.我测试了几次,但不是太严格(也许它可能有效,但谁知道!我不太擅长sigfigs …)
def find_sigfigs(x):
'''Returns the number of significant digits in a number. This takes into account
strings formatted in 1.23e+3 format and even strings such as 123.450'''
# change all the 'E' to 'e'
x = x.lower()
if ('e' in x):
# return the length of the numbers before the 'e'
myStr = x.split('e')
return len( myStr[0] ) - 1 # to compenstate for the decimal point
else:
# put it in e format and return the result of that
### NOTE: because of the 8 below, it may do crazy things when it parses 9 sigfigs
n = ('%.*e' %(8, float(x))).split('e')
# remove and count the number of removed user added zeroes. (these are sig figs)
if '.' in x:
s = x.replace('.', '')
#number of zeroes to add back in
l = len(s) - len(s.rstrip('0'))
#strip off the python added zeroes and add back in the ones the user added
n[0] = n[0].rstrip('0') + ''.join(['0' for num in xrange(l)])
else:
#the user had no trailing zeroes so just strip them all
n[0] = n[0].rstrip('0')
#pass it back to the beginning to be parsed
return find_sigfigs('e'.join(n))
解决方法:
我认为正则表达式在这里有点过分,但你的方法应该有效,我确信它不是性能问题.
我认为你最终会用你所描述的东西走上正轨.我会使用split(‘e’)后跟rstrip(‘0′),这将删除’尾随零’.如果要保留递归调用,则可以将字符串重新组合在一起.
内容总结
以上是互联网集市为您收集整理的javascript – Python计算有效数字全部内容,希望文章能够帮你解决javascript – Python计算有效数字所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。