—-
Convent.ToDouble(dt.rows[ i ][ j ]).ToString()
—-
引用 1 楼 lcawen 的回复:
Convent.ToDouble(dt.rows[ i ][ j ]).ToString()
这样用起来很麻烦啊.因为我表中的内容不全是数字啊,还有字符串的.
如果需要自己去判断里面到底应该是数字还是字符串,我还不如用我原来的解决办法,循环一下,看里面有小数点,就去掉最后一个0
我一开始是直接将datatable绑定到dataGridView里,然后发现有这个没法处理的问题
后来实在不行,我又重新定义了个datatable,先将数据都转字符串,然后判断有小数点就去掉个0,最后放到新的datatable里显示.
—-
dataGridView里显示的是文本,显示的时候应该是默认都执行了tostring()的方法
—-
怎么沉了.没人知道么?
—-
Decimal amt = Decimal.Parse(dataReader.GetValue(0).ToString());
由于DataReader把结果列当成了Double,导致无法直接用GetString及GetDecimal读取,只能这样多步转换。
—-
引用 5 楼 akuma8848 的回复:
Decimal amt = Decimal.Parse(dataReader.GetValue(0).ToString());
由于DataReader把结果列当成了Double,导致无法直接用GetString及GetDecimal读取,只能这样多步转换。
我并不是想从datatable中获取数值,仅仅是以字符串显示的时候小数点后面多个0……
即使当成double,tostring之后也不该多出个0啊.
double d = 123.456;
string s = d.ToString();
s的值是”123.456″,并没有出现”123.4560″的情况
—-
PS:我之前的编程工具是VS2005,语言C#
刚刚转换为VS2008,依然是这样.
dataGridView直接绑定dataTable后,小数点后有3位小数的,全部多了个0
—-
可能有指定格式?tostring(“G”)
http://blog.csdn.net/firetaker/article/details/5529672
—-
提示object.tostring()没有1个方法的重载
—-
datatable中单元格的类型是object,也就是往里放什么类型的数据都行.除非指定了columns的dataType
dataGridView是用来显示的,所以单元格类型是string
将dataGridView的数据源指定为datatable后,显示的过程中一定是默认都执行了一次tostring方法
而且我用代码手动将datatable.rows[i][j].tostring()后看到的结果跟dataGridView中显示的一样.
—-
decimal value = 162.233m;
string s = value.ToString(“G”);
这样是正常的。
—-
引用 11 楼 akuma8848 的回复:
decimal value = 162.233m;
string s = value.ToString(“G”);
这样是正常的。
直接用decimal转的话,即使不加G也没问题的.
问题就是从数据库里读出来就不一样了…
我自己建个dataTable,然后手动添加列,手动添加一行,里面放个decimal,转成string也没问题.
就是不知道从数据库里获得的dataTable为什么会不同.从属性上看没什么不同的啊.都是decimal型
—-
DataTable dt = new DataTable();
dt.Columns.Add("1");
dt.Columns[0].DataType = typeof(decimal);
DataRow dr = dt.NewRow();
dr[0] = 12.0610f;
dt.Rows.Add(dr);
string s = dt.Rows[0][0].ToString();
运行后s的结果为”12.061″
再看这个
—-
(decimal)dt.Rows[0][0] 不知道行不,不太清楚dt.Rows[0][0] 出来的值
建议调试时候加一句
decimal value = dt.Rows[0][0];
或者看看dt.Rows[0][0] 的值是否正确,以确定问题出在哪一步。
—-
decimal d = (decimal)dt.Rows[i][j];执行出来没有问题.当然不加强制转换语法是不让的,因为dt.Rows[i][j]类型默认是object
—-
再看这个,是我手动创建个datatable,添加列,添加行,设置列格式为decimal
—-
[quote=引用 因为 decimal 是固定小数位的,
实际应该类似于 SqlServer 里的 decimal,
如 decimal(10,3) ,为3位小数,
而c#里定义时不需要指定小数位,而是根据内容自动调整小数位,
但它存储格式是固定小数位的,可以根据运算或赋值自动调整位数,]
http://bbs.csdn.net/topics/390238484
没看到如何解决,但回帖中提到上边的事,因为那个m估计补齐的。
—-
不是.看我13楼的代码,给decimal赋值的时候已经多写了一个0了,但是编译器会自动把这个0舍弃.
—-
万能的版主大神,给看看吧,咋回事啊?
—- 40分
不如做个判断得了
if(Value is decimal)
((decimal)Value).ToString(“###”)
decimal 转换成string去除多余的0 decimal.ToString(“F0”)
—-
试了试,发现F0这个参数是保留0位小数
改为F3,3位小数的确实都只保留到3位了,但是0也变成0.000了…….
谁能知道这个问题出现的根源在哪啊?
如果仅仅从结果出发,我去掉字符串的最后一个0也是可以达到预期的目标的
但是要多定义一个datatable,然后再循环给它赋值,很是繁琐.
—-
试试这个呢,这个会默认为2位小数。dt.rows[ i ][ j ].tostring(“F2“)
—-
dt.rows[ i ][ j ].tostring(“G“)
—-
dt.rows[ i ][ j ]是object类型的,object.tostring()方法没有重载,不能加参数.
而且使用dt.rows[ i ][ j ].tostring()的方式,不是还跟我原来遇到的问题一样吗,还是要赋值给另一个datatable
不能直接datasource=dt
—-
看来版主大人也没什么好主意.
算了,结贴吧.
感谢akuma8848的热心支持
—-
是不是oracle的表有问题,重新建立个测试表看看