c++ - 线性大小增加有时最终会增加 1

标签 c++ windows

我有一个流式布局。里面有大约 900 张 table 。每张 table 都堆叠在一起。我有一个调整它们大小的 slider ,从而导致流布局也调整大小。

问题是,表格应该线性调整大小。它们的基本尺寸为 200x200。所以当scale = 1.0时,表格的w和h为200。

这是问题的一个例子:

enter image description here

我的问题是 delta 是 8 而不是 9。我可以做些什么来确保我的增长总是线性的?

void LobbyTableManagaer::changeTableScale( double scale )
    {
        setTableScale(scale);
    }

    void LobbyTableManager::setTableScale( double scale )
    {
        scale += 0.3;
        scale *= 2.0;

        float scrollRel = m_vScroll->getRelativeValue();
        setScale(scale);
        rescaleTables();
        resizeFlow();
    ...

    

    double LobbyTableManager::getTableScale() const
        {
            return (getInnerWidth() / 700.0) * getScale();
        }

    void LobbyFilterManager::valueChanged( agui::Slider* source,int val )
    {
        if(source == m_magnifySlider)
        {
            
            DISPATCH_LOBBY_EVENT
            {
                (*it)->changeTableScale((double)val / source->getRange());
            }
        }
    }

简而言之,我想确保表格总是以线性量增加。我不明白为什么每次 delta 都是 8 而不是 9。

谢谢

最佳答案

看看您的“200 X Table Scale”值,它们上升了大约 8.8。因此,当它四舍五入为整数时,大约有 80% 的时间会比前一个值多 9,而在另外 20% 的情况下会多 8。

如果你真的需要每次增加相同的大小,你必须用整数来做所有事情。否则,您必须调整比例变化,使结果更接近 9.0。

关于c++ - 线性大小增加有时最终会增加 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044157/

相关文章:

windows - 在Windows中以cmd打开指定的路径

c++ - 为什么这段代码可以编译无误?

c++ - 一起处理异常的公共(public)部分

c++ - 我怎样才能用这段代码把 cin 变成小写?

c++ - c_str使用不当

c++ - 如何清除 SDL_Surface 以替换为另一个 SDL_Surface?

c - 检测所有当前发出信号的信号量

c++ - 读取目录中的所有文件名

windows - 为什么错误 80070002 没有描述?

windows - 尝试在 32 位 Windows 上运行 64 位测试