Форматировать текст из текстового поля в процентах - PullRequest
4 голосов
/ 11 мая 2009

У меня есть числовое значение в Textbox, которое я хотел бы отформатировать как процент. Как я могу сделать это в C # или VB.NET?

Ответы [ 4 ]

4 голосов
/ 12 мая 2009

В VB.NET ...

YourTextbox.Text = temp.ToString("0%")

И С # ...

YourTextbox.Text = temp.ToString("0%");
2 голосов
/ 12 мая 2009

Основываясь на ответе Ларсенала, как насчет использования события TextBox.Validating примерно так:

yourTextBox_Validating(object sender, CancelEventArgs e)
{
    double doubleValue;
    if(Double.TryParse(yourTextBox.Text, out doubleValue))
    {
        yourTextBox.Text = doubleValue.ToString("0%");
    }
    else
    {
        e.Cancel = true;
        // do some sort of error reporting
    }
}
1 голос
/ 12 мая 2009

Для дополнительного удовольствия давайте сделаем парсер немного более сложным.

Вместо Double.TryParse давайте создадим Percent.TryParse, который пройдет эти тесты:

100.0 == " 100.0 "
 55.0 == " 55%  "
100.0 == "1"
  1.0 == " 1 % "
  0.9 == " 0.9  % "
   90 == " 0.9 "
 50.0 == "50 "
1.001 == " 1.001"

Я думаю, что эти правила выглядят справедливо, если бы я был пользователем, который требовал ввода процента. Он позволяет вам вводить десятичные значения вместе с процентами (требуются конечный символ "%" или введенное значение больше 1).

public static class Percent {
    static string LOCAL_PERCENT = "%";
    static Regex PARSE_RE = new Regex(@"([\d\.,]+)\s*("+LOCAL_PERCENT+")?");
    public static bool TryParse(string str, out double ret) {
        var m = PARSE_RE.Match(str);
        if (m.Success) {
            double val;
            if (!double.TryParse(m.Groups[1].Value, out val)) {
                ret = 0.0;
                return false;
            }
            bool perc = (m.Groups[2].Value == LOCAL_PERCENT);
            perc = perc || (!perc && val > 1.0);
            ret = perc ? val : val * 100.0;
            return true;
        }
        else {
            ret = 0.0;
            return false;
        }
    }
    public static double Parse(string str) {
        double ret;
        if (!TryParse(str, out ret)) {
            throw new FormatException("Cannot parse: " + str);
        }
        return ret;
    }
    public static double ParsePercent(this string str) {
        return Parse(str);
    }
}

Конечно, это все излишне, если просто поставить знак "%" за пределами TextBox.

0 голосов
/ 02 июля 2009

Небольшая хитрость для заполнения Label (& TexBox) на панели перед вводом пользователя. Это охватывает десятичные числа, целые числа, проценты и строки.

Использование C # 1.1 в событии Page_Load до того, как что-либо произойдет:

if (!this.IsPostBack)

{

pnlIntake.Vissible=true'    // what our guest will see & then disappear  
pnlResult.Vissible=false"   // what will show up when the 'Submit' button fires   

txtIperson.Text = "enter who";  
lbl1R.Text = String.Format(Convert.ToString(0));     // how many times  
lbl2R.Text = String.Format(Convert.ToString(365));   // days a year  
lblPercentTime = String.Format("{0:p}", 0.00);       // or one zero will work '0'  
lblDecimal = String.Format("{0:d}", 0.00);           // to use as multiplier  
lblMoney = String.Format("{0:c}", 0.00);             // I just like money  

<  some code goes here - if you want >
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...