我正在通过 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.5
、334.50
、334.50000000000
,这些都是 double
的相同数字。在将 double
格式化为带尾随零的 string
时,您需要指定要显示的小数位数。
当您只是追加数字时,根本不应该在 double
和 string
之间进行转换。改为使用简单的字符串连接:
label1->Text = label1->Text + Convert::ToString(num);
只有在执行实际的算术运算时,或者如果你想在分配之前验证新字符串时,才在 double
和 string
之间转换,例如:
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/