首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Igor Pro中计算数值列表的小数位数

如何在Igor Pro中计算数值列表的小数位数
EN

Stack Overflow用户
提问于 2021-05-21 20:32:23
回答 1查看 59关注 0票数 0

我正在使用Igor Pro (我不经常使用它)。我正在尝试计算小数点右边的位数,如果有的话,对于一个波。然后将小数位加到第二个波的左边,不管在第一波中有多少位。作为参考,我附上了一张我目前拥有的照片。"test_correct“是它应该看起来的样子,而"fix_err”是我当前输出的内容。我在这方面已经有一段时间了,但似乎不能弄明白,任何帮助都将不胜感激。谢谢example

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-05-21 22:48:09

您的示例错误地使用了num2str。默认情况下,这只返回5位小数,请参阅其文档。您还可以调整表中显示的位数。

你能谈谈你想要实现的目标吗?到目前为止,我从来不需要知道小数点右边的位数。

编辑:小数位数取决于将数字转换为字符串的方式。因此,一般而言,这是行不通的。

一个朴素的实现

代码语言:javascript
复制
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

可能是一个很好的起点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67636933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档