好心人帮我看看这段PB代码如何转为VB代码

kill203 2007-07-29 07:09:05
PB代码请看:
string ls_str_bz_1
string ls_str_bz_2
ls_str_bz_1=243448296632 //这是字符串,不是数字。
ls_str_bz_2 = string(truncate(long(ls_str_bz_1) * 7.749333,0))
这段代码算出结果是 ls_str_bz_2= -10576593762 //字符串



用VB想实现这段代码,可是死活算不出为什么是-10576593762

请高人用一段VB代码实现对应的这段PB代码,要求必须能算出是PB的结果,多谢。
...全文
125 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgwbzhd 2007-07-30
  • 打赏
  • 举报
回复
首先我声明,我不了解VB,但是我觉得你不能单凭结果去对照。
可能通过语法对照过去了,但是结果不一致。

首先要了解PB中为什么会得到那样的结果。

ls_str_bz_1="243448296632" //如果是直接赋值的话,需要加""号

ls_str_bz_2 = string(truncate(long(ls_str_bz_1) * 7.749333,0))
//为什么算出结果是-10576593762

因为在PB中long的范围为 from -2147483648 to +2147483647
那么如下是成立的:
string(2147483647),就是2147483647
string(2147483647+1)就会是-2147483648
依次来循环的。那么每个循环的个数为2147483647+2147483648+1=4294967296

那么你的long(243448296632)之后的值为-1364839240。至于VB得不到一样的值,应该区别就在这里了。

为什么会得到那个值呢,有上面的循环知道,240518168576
243448296632=56×4294967296+2930128056
2930128056=2147483647+782644409
有上面的2147483647+1=-2147483648可以推算
2147483647+782644409=-2147483648+782644408=-1364839240

这个就是long之后的值为什么会是那个的原因了。

再加上你的运算。
-1364839240 * 7.749333=多少呢??(通过计算机计算为-10576593762.22692)

此时不要困惑,虽然他的结果超出了long的范围,但是根据pb的规则。
在计算long * Double时,首先会把long类型转换成更高级的Double类型。
Double类型表示的范围为 from 2.2250738585073E-308 to 1.79769313486231E+308
显然就可以容纳你的计算结果了。

所以得出来的结果是-10576593762.22692,之后你再截位。

如果要用vb获得同样地值,好像比较困难,因为他们的类型范围好像和pb不太一致。
不过你也比较熟悉vb的话,当然可以搞出来的。

1,072

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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