ASP.NET Decimal.Parse()

我在网页有问题,Visual Studio声称问题是用这行decimal newAmount = PLNamount * Decimal.Parse(item.Value); 。 当我选择电流(网页是简单的电流转换器)时,解决方案被击碎。

这是CurrencyConverter.aspx.cs的列表

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public partial class CurrencyConverter : System.Web.UI.Page
{
    protected void Page_Load(Object sender, EventArgs e)
    {
        if (this.IsPostBack == false)
        {
            // The HtmlSelect control accepts text or ListItem objects.
            Currency.Items.Add(new ListItem("Euros", "0.25"));
            Currency.Items.Add(new ListItem("US Dollar", "0.32"));
            Currency.Items.Add(new ListItem("British Pound", "0.205"));
        }
    }
    protected void Convert_ServerClick(object sender, EventArgs e)
    {

        decimal PLNamount;

        bool success = Decimal.TryParse(PLN.Value,out PLNamount);
        if (success)
        {
            PLNamount = Decimal.Parse(PLN.Value);
            ListItem item = Currency.Items[Currency.SelectedIndex];
            decimal newAmount = PLNamount * Decimal.Parse(item.Value); //prollematic line

            Result.InnerText = PLNamount.ToString() + " Polish PLN = ";
            Result.InnerText += newAmount.ToString() + " " + item.Text;
        }
        else Result.InnerText = "Invalid content";
    }
}

这是CurrencyConverter.aspx的列表

<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="CurrencyConverter.aspx.cs" Inherits="CurrencyConverter" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Currency Converter</title>
</head>
<body>
Simple Currency Converter in ASP.NET web forms <br />

<form id="Form1" runat="server">
<div>
Convert: &nbsp;
<input type="text" ID="PLN" runat="server" />
&nbsp; Polish PLN to Euros.
<select ID="Currency" runat="server" />
<br /><br />
<input type="submit" value="OK" ID="Convert" runat="server"
OnServerClick="Convert_ServerClick" />
<br /><br />
<div style="font-weight: bold" ID="Result" runat="server"></div>
</div>
</form>

</body>
</html>

此代码从apress“C#2008第二版中的Pro ASP.NET 3.5”(原始版本)第5章中更改。链接到源代码apress.com/book/downloadfile/3803。 我在同一行中有完全相同的问题

本书的原始源代码

* ASPX

货币换算

    <div style="border-right: thin ridge; padding-right: 20px; border-top: thin ridge;
        padding-left: 20px; padding-bottom: 20px; border-left: thin ridge; width: 531px;
        padding-top: 20px; border-bottom: thin ridge; font-family: Verdana; background-color: #FFFFE8">
    Convert: &nbsp;
    <input type="text" ID="US" runat="server" style="width: 102px" />&nbsp; U.S. dollars to &nbsp;
    <select ID="Currency" runat="server" />
    <br /><br />
    <input type="submit" value="OK" ID="Convert" runat="server" OnServerClick="Convert_ServerClick" />
    <input type="submit" value="Show Graph" ID="ShowGraph" runat="server" OnServerClick="ShowGraph_ServerClick" />
    <br /><br />
    <img ID="Graph" alt="Currency Graph" scr="" runat="server" />
    <br /><br />
    <div style="font-weight: bold" ID="Result" runat="server"></div>
  </div>
</form>

* aspx.cs

使用系统; 使用System.Web; 使用System.Web.UI; 使用System.Web.UI.WebControls; 使用System.Web.UI.HtmlControls;

公共部分类CurrencyConverter:System.Web.UI.Page {protected void Page_Load(Object sender,EventArgs e){if(this.IsPostBack == false){// HtmlSelect控件接受文本或ListItem对象。 Currency.Items.Add(new ListItem(“Euros”,“0.85”)); Currency.Items.Add(new ListItem(“Japanese Yen”,“110.33”)); Currency.Items.Add(new ListItem(“Canadian Dollars”,“1.2”)); } Graph.Visible = false; } protected void Convert_ServerClick(object sender,EventArgs e){decimal amount; bool success = Decimal.TryParse(US.Value,out amount); if(success){//通过索引号检索选定的ListItem对象。 ListItem item = Currency.Items [Currency.SelectedIndex];

        decimal newAmount = amount * Decimal.Parse(item.Value);
        Result.InnerText = amount.ToString() + " U.S. dollars = ";
        Result.InnerText += newAmount.ToString() + " " + item.Text;
    }
    else
    {
        Result.InnerText = "The number you typed in was not in the correct format. ";
        Result.InnerText += "Use only numbers.";
    }
}

protected void ShowGraph_ServerClick(object sender, EventArgs e)
{
    Graph.Src = "Pic" + Currency.SelectedIndex.ToString() + ".png";
    Graph.Visible = true;
}

}

问题解决了

这是与此错误的打印屏幕的链接。 http://img210.imageshack.us/f/currencyerror.png/


我认为答案是基于本地化的。 我怀疑你在使用逗号作为小数点分隔符的文化风格中解析“0.25”作为小数。 你需要做的是指定数字的样式,以便正确解释它们。 一种方法是:

decimal newAmount = PLNamount * Decimal.Parse(item.Value, CultureInfo.InvariantCulture.NumberFormat)

希望人们会评论是否有更好的方法。

希望有所帮助。 我还没有证实,这绝对是你的问题,但如果我试图解析数字作为pl-PL(只是猜测你从页面擦亮),那么它在我引用的那条线上失败了,所以我认为我在正确的路线。 :)

编辑以添加:另一个选项是更改您的下拉菜单,使其具有应正确解析的值“0,25”。 不过,我个人更喜欢使用CultureInfo选项。

有趣的是,当我在页面的框中输入数字时,它似乎将“0.9”和“0,9”识别为相同的东西。 不知道它为什么在那里工作,但我想它与tryParse和Parse workign巧妙地不同。


你不需要这样做:

    bool success = Decimal.TryParse(PLN.Value,out PLNamount);
    if (success)
    {
        PLNamount = Decimal.Parse(PLN.Value);

如果TryParse成功,那么PLNamount将包含正确的值。 检查TryParse的MSDN文档。

也:

        ListItem item = Currency.Items[Currency.SelectedIndex];
        decimal newAmount = PLNamount * Decimal.Parse(item.Value); //prollematic line

如果item的值不是表示数字的字符串,则Parse将抛出异常。 为了安全起见,你也应该在这个值上使用TryParse (如果它还不是数字类型的话)。


你应该删除以下行

 PLNamount = Decimal.Parse(PLN.Value);

如果(成功)...则PLNamount已被解析,它是一个输出参数...

链接地址: http://www.djcxy.com/p/35901.html

上一篇: ASP.NET Decimal.Parse()

下一篇: How to get pending request in amazon?