ASP乘法和除法运算,保留小数的问题。

shhwymw 2015-01-23 08:48:42


Dim a
Dim b
a = 310
b = 2556
c = b/a
Response.Write(c)




算出来C = 8.24516129032258

但是在一般情况下,大家都不会保留这么长的小数位,如果按money字段,保留4位小数字 C=8.2452 (四舍五入)

再用C=8.2452*310=2556.012 跟原始的B又不同。

一般这样的情况有什么办法在尽可能保留少的小数位的同时,能让等式成立。
...全文
448 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zznice 2015-02-04
  • 打赏
  • 举报
回复
要无限接近,只能可能多的保留小数位,然后最后输出时才四舍五入,但误差是避免不了的
Dogfish 2015-01-26
  • 打赏
  • 举报
回复
一般来说,四舍五入的数字最后对还原的数据有一些小小的影响。只要对lz里面的B变量检测是否有小数,如果有小数,有效位是多少。然后保留同样的类型,就可把四舍五入的影响减低。
xuzuning 2015-01-25
  • 打赏
  • 举报
回复
a = 310 b = 2556 c = round(b/a) '8.2452 保留4位小数 Response.Write(round(c*a)) '2556 并没有误差
shhwymw 2015-01-25
  • 打赏
  • 举报
回复
我并不是要去算B,我的意思是 计算完后的总价不等于计算之前的总价。 而C是必须要算出来用的,现在就想让计算完后的总价无限接近计算前的总价
三楼の郎 2015-01-24
  • 打赏
  • 举报
回复
引用 楼主 shhwymw 的回复:


Dim a
Dim b
a = 310
b = 2556
c = b/a
Response.Write(c)


算出来C = 8.24516129032258 但是在一般情况下,大家都不会保留这么长的小数位,如果按money字段,保留4位小数字 C=8.2452 (四舍五入) 再用C=8.2452*310=2556.012 跟原始的B又不同。 一般这样的情况有什么办法在尽可能保留少的小数位的同时,能让等式成立。
一般情况没人会再用c * a去计算b,而是直接用b,因为c是通过b算出来的
shhwymw 2015-01-24
  • 打赏
  • 举报
回复
引用 1 楼 KK3K2005 的回复:
只记录总价 c = b/a 不需要写出来 有逻辑就可以 因为 只记录 a b 就知道了c 最后有误差 自己定一个误差的小数长度 对代码不会有改动影响 最后 匹配验证数据的时候 允许一个合理的误差 比如 +-1
谢谢回复。 之所以这样计算,是因为这个过程是把配料从仓库取出,然后制作成产品,再用取出的物料总价/数量,算出每公斤的单价。 之后会用这个单价进行产品销售,所以这个单价是一定要计算出来的。
KK3K2005 2015-01-24
  • 打赏
  • 举报
回复
只记录总价 c = b/a 不需要写出来 有逻辑就可以 因为 只记录 a b 就知道了c 最后有误差 自己定一个误差的小数长度 对代码不会有改动影响 最后 匹配验证数据的时候 允许一个合理的误差 比如 +-1

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧