decimal转为string sql_关于datatable的decimal转string型的bug

—-

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″

再看这个

1399437755_835199.jpg

—-

(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

1399439824_619916.jpg

1399439835_520489.jpg

—-

再看这个,是我手动创建个datatable,添加列,添加行,设置列格式为decimal

1399440084_739623.jpg

1399440090_712222.jpg

—-

[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的表有问题,重新建立个测试表看看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值