数据库用的oracle,数据类型NUMBER(6,3)
取到datatable里监视,数据正常
再dt.rows[ i ][ j ].tostring()
结果所有小数点后有3位数的,全部都在后面多补了一个0
2位,1位和整数的都没有问题.
不知道什么原因.
自己定义个decimal类型的变量转string又看不出问题来.
自己定义个datatable,dt.Columns[0].DataType = typeof(Decimal);也没问题
dt.Rows[i][j] 12.061 object {decimal}这是断点调试datatable中的数据
dr[j] “12.0610” object {string}这是断点调试tostring()后的数据
—-
这样用起来很麻烦啊.因为我表中的内容不全是数字啊,还有字符串的.
如果需要自己去判断里面到底应该是数字还是字符串,我还不如用我原来的解决办法,循环一下,看里面有小数点,就去掉最后一个0
我一开始是直接将datatable绑定到dataGridView里,然后发现有这个没法处理的问题
后来实在不行,我又重新定义了个datatable,先将数据都转字符串,然后判断有小数点就去掉个0,最后放到新的datatable里显示.
—-
—-
—-
由于DataReader把结果列当成了Double,导致无法直接用GetString及GetDecimal读取,只能这样多步转换。
—-
我并不是想从datatable中获取数值,仅仅是以字符串显示的时候小数点后面多个0……
即使当成double,tostring之后也不该多出个0啊.
double d = 123.456;
string s = d.ToString();
s的值是”123.456″,并没有出现”123.4560″的情况
—-
—-
http://blog.csdn.net/firetaker/article/details/5529672
—-
—-
dataGridView是用来显示的,所以单元格类型是string
将dataGridView的数据源指定为datatable后,显示的过程中一定是默认都执行了一次tostring方法
而且我用代码手动将datatable.rows[i][j].tostring()后看到的结果跟dataGridView中显示的一样.
—-
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 value = dt.Rows[0][0];
或者看看dt.Rows[0][0] 的值是否正确,以确定问题出在哪一步。
—-
—-
—-
实际应该类似于 SqlServer 里的 decimal,
如 decimal(10,3) ,为3位小数,
而c#里定义时不需要指定小数位,而是根据内容自动调整小数位,
但它存储格式是固定小数位的,可以根据运算或赋值自动调整位数,]
http://bbs.csdn.net/topics/390238484
没看到如何解决,但回帖中提到上边的事,因为那个m估计补齐的。
—-
—-
—- 40分
if(Value is decimal)
((decimal)Value).ToString(“###”)
decimal 转换成string去除多余的0 decimal.ToString(“F0”)
—-
改为F3,3位小数的确实都只保留到3位了,但是0也变成0.000了…….
谁能知道这个问题出现的根源在哪啊?
如果仅仅从结果出发,我去掉字符串的最后一个0也是可以达到预期的目标的
但是要多定义一个datatable,然后再循环给它赋值,很是繁琐.
—-
—-
—-
而且使用dt.rows[ i ][ j ].tostring()的方式,不是还跟我原来遇到的问题一样吗,还是要赋值给另一个datatable
不能直接datasource=dt
—-
算了,结贴吧.
感谢akuma8848的热心支持
—-