我将这个问题标记为 javascript,因为即使我目前是用 Python 编写的,如果用 Javascript 更容易实现,我也可以轻松地在 Javascript 中实现它。
我的任务是为化学系做一个有效数字计算检查器。这意味着学生将他们的数据输入到字段中,Web 应用程序将在他们的字段上执行预定义的操作并跟踪有效数字并查看他们的答案是否具有正确数量的有效数字。
当我将问题分解为我认为是一个很好的工作流程时,我意识到我需要一种方法用于 Python(后端,因为这是一个用 Django 制作的网络应用程序)或 Javascript(因为你总是可以在前端没问题)来确定有效位数。我做了一些研究并遇到了这个问题,它告诉我我需要使用 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 …Run Code Online (Sandbox Code Playgroud) 计算数字有效位数的最快方法是什么?
我有以下功能,它可以工作,但由于字符串操作很慢.
/**
* Count the number of significant digits of a number.
*
* For example:
* 2.34 returns 3
* 0.0034 returns 2
* 120.5e+3 returns 4
*
* @param {Number} value
* @return {Number} The number of significant digits
*/
function digits (value) {
return value
.toExponential()
.replace(/e[\+\-0-9]*$/, '') // remove exponential notation
.replace( /^0\.?0*|\./, '') // remove decimal point and leading zeros
.length
};
Run Code Online (Sandbox Code Playgroud)
有更快的方法吗?
更新:此处列出了测试正确运行的断言:
assert.equal(digits(0), 0);
assert.equal(digits(2), 1);
assert.equal(digits(1234), 4);
assert.equal(digits(2.34), 3);
assert.equal(digits(3000), 1); …Run Code Online (Sandbox Code Playgroud)