开发者

How to erase the comma in a calculator when the user has numbers such as 233,232 when they hit the 3 that is on the left of the comma [duplicate]

This question already has an answer here: Closed 11 years ago.

Possible Duplicate:

How to handle when the backspace button is pressed and the input panel has digit grouped numbers. E.g. 434,343,334.232.

Basically the question says it all, I'm making a calculator in c# and I'm stuck on this problem. When digit grouping is hit the numbers get separated by commas, when the user hits the backspace button, the commas act like characters that get deleted.

inputPanelTextBox.Text = inputPanelT开发者_如何学JAVAextBox.Text.Replace(",", "") I put this piece of code under my backspace click event. The problem is that say the panel has 234,232 and the user presses the backspace button, the comma is gone as well as the 2 on the far right.

What I want to happen is the same way the windows 7 calculator does when the digit grouped menu is checked and the user hits the backspace.

Any idea of how to go about this? Thank you so much in advance.


How about you store the number just as a number then format the number to look nice when you output it. The same thing will work with string.Format(). You could reformat the number into the display string every time the user hits backspace or adds a new digit. There are lots of the string format modifiers listed here.

int numWithComma = 3000;
int numWithoutComma = 50;
Console.WriteLine("numWithComma: {0:n}", numWithComma);
Console.WriteLine("numWithoutComma: {0:n}", numWithoutComma);

// prints:
// numWithComma: 3,000.00
// numWithoutComma: 50.00

If I were making this calculator, I would save the number in a double, then when the number needs to be displayed I would run it through a function like this and display the string to the user:

private static string FormatForDisplay(double number)
{
    return string.Format("{0:n}", number);
}


How about using a format string when you output the number, that way you don't have to manage commas at all.

double myDouble = 500000.012345
inputPanelTextBox.Text = myDouble.ToString("N", CultureInfo.InvariantCulture);

Its been a while since I've used Visual Studio but I'm pretty sure you can set these format strings directly on text boxes so its simply automatically handled when they type. And its easy as pie to set in the properties if I remember correctly. Check out Standard Numeric Format Strings for a bit more on it.

Also a MaskedTextBox might work as well, set the mask to something like "999,999,999,999.99" and see how that formats different numbers.

Good Luck! :D

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜