| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4333 人关注过本帖, 2 人收藏
标题:VB高精度除法
只看楼主 加入收藏
柴胡颗比克
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2020-4-25
结帖率:100%
收藏(2)
已结贴  问题点数:20 回复次数:21 
VB高精度除法
高精度除法,是要整数部分和小数部分分开求吗。难吐我了,有些地方一直卡着。
搜索更多相关主题的帖子: 除法 小数 高精度 整数 VB 
2020-04-25 00:51
柴胡颗比克
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2020-4-25
收藏
得分:0 
希望大家帮帮忙。😂我觉得好难 ,想了我好久。
2020-04-25 00:53
柴胡颗比克
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2020-4-25
收藏
得分:0 
一直卡思路,手里头也没啥资料。希望,大佬们帮助!高精度除法的计算,保留200位小数部分。我分段截取,小数,小数一直显示溢出。啊。
2020-04-25 09:45
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
收藏
得分:0 
VB的除法非常简单,C = A / B ,关键是 B 不能为 0 ,C 的数据类型必须是小数数据,也就是浮点数数据,即单精度数据或双精度数据,这样就没有问题,小数与整数都能够计算出来。
例如
Dim A As Single, B As Single, C As Single   '都定义为单精度数据
A = 554: B = 33
C = A / B
计算出来 C = 16.78788

请不要选我!!!
2020-04-25 11:38
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
仿竖式除法,一路除下去,应该不难吧。

能编个毛线衣吗?
2020-04-25 14:07
柴胡颗比克
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2020-4-25
收藏
得分:0 
回复 5楼 wmf2014
😂emm,我觉得好难。就一直不知道怎么保留200位小数部分。而且题目还要求小数部分的格式需要是每行二十个。😂
2020-04-25 16:22
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
收藏
得分:0 
双精度数据虽然是在正负4.940656458412247E-324到正负1.79769313486232E308 之间,但在VB程序中内存只占16个字节,因此在大数据运算时是以科学计数法显示的,要显示小数后200位应该有困难,估计是内存本身存储的字节数就已经限制了。
例如
Dim A As Double, B As Double, C As Double
A = 0.000000000003: B = 25647891235468
C = A / B
 C 的值显示为 1.16968680678564E-25  有效部分是16位

请不要选我!!!
2020-04-25 19:02
柴胡颗比克
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2020-4-25
收藏
得分:0 
回复 7楼 ZHRXJR
我们老师给的建议是利用仿竖式除法,但我不懂。😂代码只能写的输出16位。
2020-04-25 19:32
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:20 
要看你除数和被除数的数据范围,如果是在0--2147483648范围内就用普通除法达到200位小数的精度还是比较容易的,如果是任意位数则需要单独写大数加减乘除函数完成。
下述函数可以精确到小数点后面200位(用最像无理数的1/49为例):
程序代码:
Function div_high_sigle(a As Long, b As Long) As String
  Dim i As Long, j As Long, k As Long, c As String
  k = Int(a / b)
  j = a Mod b
  c = k & "."
  While i < 200
    j = j * 10
    While j < b
      c = c & "0"
      j = j * 10
      i = i + 1
    Wend
    c = c & Int(j / b)
    j = j Mod b
    i = i + 1
  Wend
  div_high_sigle = c
End Function

Private Sub Command1_Click()
  Text1 = ""
  Text1 = div_high_sigle(1, 49)
  MsgBox Len(Text1)
End Sub


1/49的结果如下(循环节长度42位,楼主可自己数一下):
0.02040816326530612244897959183673469387755102040816326530612244897959183673469387755102040816326530612244897959183673469387755102040816326530612244897959183673469387755102040816326530612244897959183673


[此贴子已经被作者于2020-4-25 21:06编辑过]


能编个毛线衣吗?
2020-04-25 20:31
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
收藏
得分:0 
柴胡颗比克:wmf2014 的方法是利用小数与整数分离得到一个字符串从而取得小数后200位,值得学习。

请不要选我!!!
2020-04-25 22:11
快速回复:VB高精度除法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016150 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved