jQuery MiniUI

 找回密码
 立即注册
楼主: q123126
打印 上一主题 下一主题

json反序列化之后小数四舍五入 [复制链接]

Rank: 6Rank: 6

11#
发表于 2014-4-14 18:35:07 |只看该作者
lost 发表于 2014-4-14 18:21
把你的表格页面提供下再提供几条数据,我们看下
打包在高级模式下上传

由于页面比较复杂,我就只是贴上表格以及相关的代码
  1.                     <div id="datagrid1" idfield="barcode" class="mini-datagrid" style="width: 100%; height: 100%;"
  2.                         virtualscroll="true" showpager="false">
  3.                         <div property="columns">
  4.                             <div type="indexcolumn">
  5.                             </div>
  6.                             <div field="barcode" headeralign="center">
  7.                                 barocde</div>
  8. <div field="goods_wgt" decimalplaces="3" datatype="float" headeralign="center" align="right">
  9.                                 goods_wgt</div>
  10.                             </div>
  11.                     </div>
复制代码
通过一个按钮触发加载数据
  1.             $('#btnBegin').click(function() {
  2.                 grid1.setUrl('xxx');
  3.                 grid1.load(param);
  4.             });
  5. //此处实际加载数据可以参考
  6. //[{"barcode":"0000000770323","goods_wgt":0.0000},{"barcode":"0000000770324","goods_wgt":0.5000}]
  7. //特别要注意的是,加载的数据第一行的数值字段是0.0000
复制代码

然后不用操作,直接获取数据
var data = mini.encode(grid1.getData());//这个时候第二行的goods_wgt不再是0.5。



Rank: 8Rank: 8

12#
发表于 2014-4-15 09:42:13 |只看该作者
q123126 发表于 2014-4-14 18:35
由于页面比较复杂,我就只是贴上表格以及相关的代码
通过一个按钮触发加载数据
你说的是这样的小数啊...

0.5000这种的后面的零,JS本来就是会没有的.

你可以自己试下,alert(0.5000),看看他弹出的结果是0.5,还是0.5000

Rank: 6Rank: 6

13#
发表于 2014-4-15 10:02:01 |只看该作者
本帖最后由 q123126 于 2014-4-15 10:06 编辑
factory 发表于 2014-4-15 09:42
你说的是这样的小数啊...

0.5000这种的后面的零,JS本来就是会没有的.

是的,可能是我没说清楚。
不是小数的问题,比如第一行是0.0000,会被认为是0,那么第二行的0.5000也会按照整数处理,也变成了0。也就是后面所有的数据都是按照第一行的数据类型来算。我举例这个数据有点特殊,如果第二列是3.18,那么处理后的结果就是3。不知道这样说清楚了没

Rank: 8Rank: 8

14#
发表于 2014-4-15 10:12:36 |只看该作者
q123126 发表于 2014-4-15 10:02
是的,可能是我没说清楚。
不是小数的问题,比如第一行是0.0000,会被认为是0,那么第二行的0.5000也会按 ...


没变0,还是0.5

附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 6Rank: 6

15#
发表于 2014-4-15 10:26:30 |只看该作者
felt 发表于 2014-4-15 10:12
没变0,还是0.5

不好意思,都被弄糊涂了,不是说这里返回不对,是因为这里返回的第一行是整数0,所以json.net反序列化的时候,goods_wgt列就被认为是整数,导致当前列的后面所有行的小数都被去掉了。不知道这个怎么解决。

Rank: 8Rank: 8

16#
发表于 2014-4-15 11:16:19 |只看该作者
q123126 发表于 2014-4-15 10:26
不好意思,都被弄糊涂了,不是说这里返回不对,是因为这里返回的第一行是整数0,所以json.net反序列化的时 ...

goods_wgt不是还是0.5吗?没变整数啊

Rank: 6Rank: 6

17#
发表于 2014-4-15 11:28:47 |只看该作者
factory 发表于 2014-4-15 11:16
goods_wgt不是还是0.5吗?没变整数啊

mini.encode的时候没有变,但是这里第一行的goods_wgt已经变成了整数0,而不是本身的0.0000,导致提交给后台程序的时候把goods_wgt整列都认为是整数了。第二行的0.5就会变成0.

Rank: 8Rank: 8

18#
发表于 2014-4-15 11:32:54 |只看该作者
q123126 发表于 2014-4-15 11:28
mini.encode的时候没有变,但是这里第一行的goods_wgt已经变成了整数0,而不是本身的0.0000,导致提交给 ...

还是没明白,encode是从你getData()获取出来的数据而来的,encode没变,自然getData()也是没变

getData()没变,那么数据就是没变.

而且我逐步断点调试,自始至终一直都是0.5

我不知道你说他变成0,是从哪个依据上说的

Rank: 6Rank: 6

19#
发表于 2014-4-15 11:38:51 |只看该作者
factory 发表于 2014-4-15 11:32
还是没明白,encode是从你getData()获取出来的数据而来的,encode没变,自然getData()也是没变

getData()没 ...

我给的实例数据不是2行吗,第一行本身的数据是0.0000,第二行是0.5000.
getdata的时候0.0000变成了0,就是想这里不变,或者保持decimalplaces的小数位数。不然这一列变成整数了。

Rank: 8Rank: 8

20#
发表于 2014-4-15 13:14:24 |只看该作者
q123126 发表于 2014-4-15 11:38
我给的实例数据不是2行吗,第一行本身的数据是0.0000,第二行是0.5000.
getdata的时候0.0000变成了0,就是 ...

我已经告诉你了,小数点后面,没有意义的0,不管是0.500还是0.0000
都会被舍弃掉, 这个JS本身就是如此

Archiver|普加软件

GMT+8, 2025-4-12 01:26 , Processed in 1.036794 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部