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:
<input type="text" ID="PLN" runat="server" />
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:
<input type="text" ID="US" runat="server" style="width: 102px" /> U.S. dollars to
<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