我将一个数值保存到一个数据表单元格中(没有显式声明该单元格的数据类型),然后检索该数据并尝试将其格式化为字符串。问题是我尝试过的任何东西都不能正确格式化字符串。
50000 - > 50000
我试过了(其中r是循环中的行):
String.Format("{0:0,0}", r["columnName"])
r["columnName"].ToString("n0")
几个变种没有任何运气。大多数时候我只是得到没有逗号的数字。
答案 0 :(得分:1)
的String.Format( “{0:0,0}”,int.Parse(R [ “COLUMNNAME”]的ToString()))
答案 1 :(得分:0)
为您尝试做的事情提供更多上下文可能会有所帮助,但这里有一个从DataTable中获取值然后根据需要对其进行格式化的示例。
DataTable dt = new DataTable();
dt.Columns.Add( "cellName", typeof( double ) );
dt.Rows.Add( 123.45 );
string val = ( (double)dt.Rows[0]["cellName"] ).ToString( "N" ); // val = "123.45"
我在调用ToString之前显式地将值转换为double。您也可以在该值上调用string.Format而不是ToString,它也可以正常工作。
编辑:如果您将值存储为字符串然后想要格式化,请使用:
string val = ( double.Parse( dt.Rows[0]["cellName"] ) ).ToString( "N" );
这确实假设该值是可解析的(即不为空)。
答案 2 :(得分:0)
可能不是最优雅的解决方案,但您可以从字符串的尾端(或从小数点)向后迭代,每三个字符添加一个逗号,直到用完为止。
答案 3 :(得分:0)
这些方法的问题在于,根据底层表的结构,该字段可能为null。如果你试图将作为对象(在DataTable中)保存的空值转换为字符串,整数,小数或者你有什么......你的应用程序会在100%的时间内爆炸。除非您的DataSet是强类型数据集,否则您始终希望执行此错误检查。事实上,编写一个小数据读取类来读取字符串,小数,日期时间,整数,等等......在与数据库有关的任何数据访问操作中都是必须的....
所以这里有更多的错误验证方法,理想情况下应该包含在这里显示的辅助方法中:
public static string GetFormatedDecimalString(DataRow row, string columnName, string format)
{
string ColumnNameStringValue = String.Empty;
decimal ColumnNameValue = Decimal.Zero;
if( row[columnName) == DBNull.Value )
{
ColumnNameValue = Decimal.Zero;
}
else
{
ColumnNameStringValue = row[columnName].ToString();
if( ! Decimal.TryParse(ColumnNameStringValue, out ColumnNameValue )
{
ColumnNameValue = Decimal.Zero;
}
// if the if statement evaluated to false the ColumnNameValue will have the right
// number you are looking for.
}
return ColumnNameValue.ToString(format);
}
传递“N”或“{0:0,0}”作为格式字符串将正常工作。