c++ - 通过类型转换 C++ 向其添加 0 后,标签文本不会在 Windows 窗体上更新

标签 c++ visual-studio

我正在通过 C++ 在 Windows 窗体中制作一个简单的计算器。我有一个条件,当我在小数部分后单击 0 按钮时,它应该更新屏幕上的标签文本......但它没有..例如:

我在屏幕上 334.5 我点击 0 按钮,它不会在标签上更新 但是当我点击其他按钮让我们说 8 然后它像这样更新

334.508

我正在从 double 类型转换为字符串,反之亦然...

这是一段代码...

    int totalLength = 0;
bool decimalPressed = false;
int decimalPart = 1;
bool isNegative = false;

void AddNewNum(double num){
    if (totalLength < 12){
        if (decimalPressed == false){
            if (isNegative == false){
                double prevDisplay = Convert::ToDouble(label1->Text);
                prevDisplay = (prevDisplay * 10) + num;
                label1->Text = Convert::ToString(prevDisplay);
            }
            else{
                double prevDisplay = -1 * Convert::ToDouble(label1->Text);
                prevDisplay = (prevDisplay * 10) + num;
                label1->Text = Convert::ToString(-1 * prevDisplay);
            }
        }
        else{// for adding digits in decimal part in this section error occurs .. only problem is display everything is okay
            if (isNegative == false){
                double prevDisplay = Convert::ToDouble(label1->Text);
                if (num != 0)
                    prevDisplay = ((prevDisplay * (pow(10, decimalPart)) + num) / pow(10, decimalPart));
                else{
                    prevDisplay = ((prevDisplay * (pow(10, decimalPart))) / pow(10, decimalPart));
                }
                label1->Text = Convert::ToString(prevDisplay);
            }
            else{
                double prevDisplay = -1 * Convert::ToDouble(label1->Text);
                prevDisplay = ((prevDisplay * (pow(10, decimalPart)) + num) / pow(10, decimalPart));
                if (num != 0)
                    prevDisplay = ((prevDisplay * (pow(10, decimalPart)) + num) / pow(10, decimalPart));
                else{
                    prevDisplay = ((prevDisplay * (pow(10, decimalPart))) / pow(10, decimalPart));
                }
                label1->Text = Convert::ToString(-1 * prevDisplay);
            }
            decimalPart++;
        }
        totalLength++;
    }
    else maskedTextBox1->Text = "LIMIT REACHED";
}

最佳答案

334.5334.50334.50000000000,这些都是 double 的相同数字。在将 double 格式化为带尾随零的 string 时,您需要指定要显示的小数位数。

当您只是追加数字时,根本不应该在 doublestring 之间进行转换。改为使用简单的字符串连接:

label1->Text = label1->Text + Convert::ToString(num);

只有在执行实际的算术运算时,或者如果你想在分配之前验证新字符串时,才在 doublestring 之间转换,例如:

string s = label1->Text + Convert::ToString(num);
Convert::ToDouble(s); // check for errors
label1->Text = s;

无论哪种方式,都没有理由手动跟踪任何 decimalPart 值。如果用户输入小数,您可以检测到这一点,以便在输入后续数字时插入 . 字符。

bool decimal = false;

...

// user enters decimal point...
decimal = true;

...

// user enters a digit...
string s = label1->Text;
if (decimal) {
    decimal = false;
    s = s + ".";
}
s = s + Convert::ToString(num);
Convert::ToDouble(s); // check for errors
label1->Text = s;

关于c++ - 通过类型转换 C++ 向其添加 0 后,标签文本不会在 Windows 窗体上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39310196/

相关文章:

c++ - Firebreath C++一些指针的理解

c# - 不同编程语言中的 Windows 小工具风格行为

c# - 比较 float 的总和

c# - 我可以替换 <see cref =""> 文档标签的值吗?

c++ - 在 C++ 中获取 IP 地址的独立于平台的方法

c++ - C++ 头文件不包含任何其他头文件的任何充分理由?

c++ - 为什么 i += a[i]++ 在使用 Visual C++ 递增 a[i] 之前分配 i?

c++ - 想要在 QThread 中更新 QtableWidget

visual-studio-2010 - 如何在 Visual Studio 2012 中设置断点的背景颜色?

c# - 是否有用于 Visual Studio 的断点插件?