igor - 如何计算 Igor Pro 中值列表的小数位数
问题描述
我正在使用 Igor Pro(我不经常使用)。我正在尝试计算一波小数点右侧的位数,如果有的话。然后在第二波中添加一个小数位,无论左边多少位,都在第一波中。作为参考,我附上了一张我目前拥有的照片。波“test_correct”是它应该的样子,而“fix_err”是我当前输出的。我已经有一段时间了,但似乎无法弄清楚,任何帮助将不胜感激。谢谢 例子
Function testErrFix()
wave test_energy, test_err
variable i, j, s
variable len = numpnts(test_energy)
make/O/D/N=(len) fix_err
string current_Energy
string current_Err
string Error
variable slen
For(i=0;i<len;i+=1)
current_Energy = num2str(test_energy[i])
current_Err = num2str(test_err[i])
slen = strlen(current_energy)
Error = ""
For(j=0;j<slen;j+=1)
If(Stringmatch(current_Energy[j], ".")==1)
For(s=j;s<slen;s+=1)
Error += "." + current_Err[s-4] + current_Err[s-3] + current_Err[s-2]
EndFor
ElseIf(Stringmatch(current_Energy[j], "")==1)
Error += current_Err[s+1]
For(s=j;s<slen;s+=1)
Error = current_Err[s]
EndFor
EndIf
EndFor
fix_err[i] = str2num(Error)
EndFor
End
解决方案
您的示例错误地使用了 num2str。默认情况下,这只返回 5 位小数,请参阅其文档。您还可以调整表中显示的位数。
你能详细说明你想要达到的目标吗?到目前为止,我从来不需要知道小数点右边的位数。
编辑:小数位数取决于您将数字转换为字符串的方式。所以一般来说这是行不通的。
一个天真的实现
Function/S num2strHighPrec(variable num)
string str
sprintf str, "%.15f", num
return str
End
Function/S RemoveEndingExhaustive(string str, string ending)
string result
for(;;)
result = RemoveEnding(str, ending)
if(!cmpstr(result, str) || strlen(result) == 0)
return result
endif
str = result
endfor
End
Function CountDecimalPlaces(variable num)
string numAsStr
variable pos
numAsStr = num2strHighPrec(num)
numAsStr = RemoveEndingExhaustive(numAsStr, "0")
pos = strsearch(numAsStr, ".", 0)
if(pos < 0)
return 0
endif
return strlen(numAsStr) - 1 - pos
End
可能是一个很好的起点。
推荐阅读
- html - 登录后如何将 vba 导航到新选项卡?
- sql - 如何在 MS Access 2007 中更新表
- swift - 如何以管理员权限运行命令
- javascript - Lodash uniqWith,如何说 lodash 保持最后一个重复
- sql-server - 我如何找到名字相同但姓氏不同的足球运动员的名字?
- python - 如何解决 keras 中的 lstm 尺寸错误?
- python - 使用 Flask-SqlAlchemy 查询关系数据库
- javascript - 在打字稿/javascript中连接字符串
- python - 如何知道我在潜在狄利克雷分配中的课程?
- mysql - 虽然 col1 和 col2 以及索引,但重复的条目如何仍然从我的表中弹出?