起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5714|回复: 10

[结贴] 计算出现小数点后很多位,怎么处理

[复制链接]

50

主题

183

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
QQ
发表于 2014-10-17 15:28:59 | 显示全部楼层 |阅读模式
我的代码,合计数
for ( var i = 0; i < data.getCount(); i++)
                 {
                         var id =data.getRowId(i);
                         if(data.getValue("fzhuangtai",id)!="已取消")
                         {
                                         hejijine=hejijine + data.getValue("fshangjifenpeijine",id)*1.0;
                         }
               
                 }
dataMaster.setValue("fxiangxiajifenpeijine", String(hejijine));

hejijine计算出现小数点后很多位,不能四舍五入。例
7845.875000000001

并影响到后续计算的精确性
这种情况在很多地方都有,怎么彻底解决

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2014-10-17 16:03:14 | 显示全部楼层
js中计算会有精度的问题,用提供的API去计算
number.png
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

50

主题

183

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
QQ
 楼主| 发表于 2014-10-17 16:18:58 | 显示全部楼层
jishuang 发表于 2014-10-17 16:03
js中计算会有精度的问题,用提供的API去计算

可否有例子,怎么调用的

另外我用经常用justep.XData.sum(datadetail.id,"fshangbaojine",null),很简单,换成这种方法,修改量太大
回复 支持 反对

使用道具 举报

50

主题

183

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
QQ
 楼主| 发表于 2014-10-17 16:37:55 | 显示全部楼层
本帖最后由 lutong001 于 2014-10-17 16:45 编辑

for ( var i = 0; i < data.getCount(); i++)
                 {
                         var id =data.getRowId(i);
                         if(data.getValue("fzhuangtai",id)!="已取消")
                         {
                                         //hejijine=hejijine + data.getValue("fshangjifenpeijine",id)*1.0;
                                         hejijine = justep.Number.accAdd(hejijine,data.getValue("fshangjifenpeijine",id)*1.0);
                         }
               
                 }
还是不行,结果又有很多小数位

其实我的数据很简单,只有小数点后两位,全是加法,怎么可能算不清楚
回复 支持 反对

使用道具 举报

发表于 2014-10-17 16:52:53 | 显示全部楼层
lutong001 发表于 2014-10-17 16:37
for ( var i = 0; i < data.getCount(); i++)
                 {
                         var id =data ...

你到底是想获取什么,,这样计算有问题吗?你想 要获取的就是最精确的数字,现在精确了你又觉得位数多了?实在不行你就format  一下 千分位分割呗
回复 支持 反对

使用道具 举报

50

主题

183

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
QQ
 楼主| 发表于 2014-10-20 11:28:19 | 显示全部楼层
忘了忘了 发表于 2014-10-17 16:52
你到底是想获取什么,,这样计算有问题吗?你想 要获取的就是最精确的数字,现在精确了你又觉得位数多了 ...

例:5.28+3.1 应该精确等于6.38,但是平台给我算出6.3799999999999,这明显是个错误,这样说你明白吗,
数据控件的format不管用,依然是6.3799999999999
回复 支持 反对

使用道具 举报

发表于 2014-10-20 11:39:33 | 显示全部楼层
lutong001 发表于 2014-10-20 11:28
例:5.28+3.1 应该精确等于6.38,但是平台给我算出6.3799999999999,这明显是个错误,这样说你明白吗,
...

你用的是什么类型,如果是decimal,,确实是这样的。精度太高了。。你可以网上搜索一下计算方式
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2014-10-20 11:58:16 | 显示全部楼层
data.getValue("fshangjifenpeijine",id)*1.0不要这样转换类型,用js标准的parseInt、parseFloat或者
平台提供的API看看
String.png
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

50

主题

183

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
QQ
 楼主| 发表于 2014-10-21 10:24:40 | 显示全部楼层
忘了忘了 发表于 2014-10-20 11:39
你用的是什么类型,如果是decimal,,确实是这样的。精度太高了。。你可以网上搜索一下计算方式 ...

数据库是float类型,其实要求精度不高,最多小数点后4位的加减法运算,应该用什么类型
回复 支持 反对

使用道具 举报

发表于 2014-10-21 10:40:16 | 显示全部楼层
lutong001 发表于 2014-10-21 10:24
数据库是float类型,其实要求精度不高,最多小数点后4位的加减法运算,应该用什么类型 ...

那就用float,然后可以把结果toFixed();方法截取四位小数

评分

参与人数 1 +3 收起 理由
jishuang + 3 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-7-6 17:25 , Processed in 0.061373 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表