VBS 两数相加取值问题分析

所属分类: 脚本专栏 / vbs 阅读数: 2002
收藏 0 赞 0 分享
一个昵称为预言家晚报的朋友很喜欢玩SOSO问问,等级LV10,已经算比较高了。晚上挂QQ的时候,看到他的问问有更新,就点进去看了一下,问题是:
我写了如下一段VBS
复制代码 代码如下:

dim a,b,c
a=inputbox("a","please input")
b=inputbox("b","please input")
c=a+b
msgbox(c)

可是最后结果是11,我知道肯定是倒数第二行的“+”没有作为运算符,请问这段代码该咋么写才正确?
你肯定会不屑一顾,切,那么简单的程序,谁不会?那请你先别往下看,独立写出这个程序,看看到底对不对。注意我的标题是两数相加,而不是两整数相加。

满意答案有两个,一个是我朋友给的:
复制代码 代码如下:

dim a,b,c
a=inputbox("a","please input")
b=inputbox("b","please input")
c=CInt(a)+CInt(b)
msgbox(c)

另一个是昵称为“乱码”的人给出的:
复制代码 代码如下:

dim a,b,c
a=int(inputbox("a","please input"))
b=int(inputbox("b","please input"))
c=a+b
msgbox c

很显然,一个用了CInt函数,一个用了Int函数。

CInt Function
复制代码 代码如下:

When the fractional part of a value is exactly 0.5, the CInt function rounds to the closest even number. For example, 0.5 rounds to 0, 1.5 rounds to 2, and 3.5 rounds to 4.
CInt differs from the Fix and Int functions, which truncate, rather than round, the fractional part of a number.

CInt不同于Fix和Int函数删除数值的小数部分,而是采用四舍五入的方式。当小数部分正好等于0.5时,CInt总是将其四舍五入成最接近该数的偶数。例如,0.5四舍五入为0,以及1.5四舍五入为2,3.5四舍五入为4。

Int, Fix Functions
复制代码 代码如下:

Both Int and Fix remove the fractional part of number and return the resulting integer value.

The difference between Int and Fix is that if number is negative, Int returns the first negative integer less than or equal to number, whereas Fix returns the first negative integer greater than or equal to number. For example, Int converts -8.4 to -9, and Fix converts -8.4 to -8.

Int和Fix函数都删除number参数的小数部分并返回以整数表示的结果。Int和Fix函数的区别在于如果number参数为负数时,Int函数返回小于或等于number的第一个负整数,而Fix 函数返回大于或等于number参数的第一个负整数。例如,Int 将-8.4转换为-9,而Fix函数将-8.4转换为-8。

一个是四舍五入,一个是删除小数部分,哪个更高明?

其实两个都不怎么高明。虽然输入提问者给出的整数(两个1),两者都能输出正确的答案;但是如果输入的是小数,这两个程序显然都不会输出正确的答案。

下面给出一个我自认为比较“高明”的答案:
复制代码 代码如下:

Dim a,b,c
a = InputBox("a","please input")
b = InputBox("b","please input")
c = 0 + a + b
MsgBox c

没错,只是多加了一个0。VBS中+号和&号的区别我相信你已经知道,但是我还是简单的复制一下文档:

虽然也可以使用+运算符连接两个字符串,但是您仍应使用&运算符进行字符串的连接以避免混淆,提供易理解的代码。

这是因为在使用+运算符时,有可能无法确定是做加法还是做字符串连接。

表达式的基本子类型决定了+运算符所做的操作,如下表所示:

如果
两个表达式都是数值 相加
两个表达式都是字符串 连接
一个表达式是数值,另一个表达式是字符串 相加

InputBox函数的返回值是字符串子类型,如果直接用+号的话效果和&号是一样的,即连接字符串。但是如果在前面加个0,效果就不一样了,即上表中的第三种情况,变成加号应有的效果了。

当然,为了程序严谨,还应该使用IsNumeric函数判断输入的是否是数字,简单起见,我在这里就省略了。
原文:http://demon.tw/programming/vbs-add-two-number.html

更多精彩内容其他人还在看

vbscript Split函数用法详解(字符串转数组函数)

本文详细介绍了vbscript中split函数的用法,有关split函数的一些实例,vbscript中split函数的语法介绍,有需要的朋友参考下
收藏 0 赞 0 分享

VBS实现将Excel表格保存为txt文本

希望能够找到个能给excel表另存为TXT的VBS代码,虽然另存为可以选择,但还是需要直接VBS执行这一步另存为TXT格式的,应该如何写代码呢
收藏 0 赞 0 分享

vbs解决处理TXT文本数据相关问题实现代码

使用vbs处理txt数据时,会遇到一些问题,本文将提供详细的解决方法,希望可以帮助你们
收藏 0 赞 0 分享

关于vbs 生成静态页面过程中出现的问题

访问某个aspx页面,然后把服务器返回的页面以filestream 的形式保存为html格式,接下来将介绍实现代码
收藏 0 赞 0 分享

dim函数第三个参数设置截取字符的长度问题

dim函数的第三个参数,也就是截取字符的长度,我在设置这个的时候,出了些问题,提示无效的过程调用或参数,本文详细介绍如何解决
收藏 0 赞 0 分享

邪恶的eval和new Function使用介绍

这些代码可以干什么?可以肯定的是可以干很多猥琐的事
收藏 0 赞 0 分享

WScript.Shell对象SpecialFolders属性未公开文档分享

WshShell对象的SpecialFolders属性返WshSpecialFolders 对象,该对象是一个特殊文件夹集合,其中包含整套Windows特殊文件夹
收藏 0 赞 0 分享

用VBS修改(设置)系统时间和日期的代码

用 VBS 把系统的时间修改到2038年1月19日3时14分07秒之后,这样某些依赖于 Unix 时间戳的程序就会出问题。那么怎样用 VBS 修改系统的时间呢
收藏 0 赞 0 分享

VBS For Next循环的一些细节

For Next 语句是 VBS 中常用的循环语句,你可能已经用过无数次 For Next 循环,但是你是否注意过它的一些细节呢
收藏 0 赞 0 分享

VBS For Next循环的陷阱分享

在《VBS For Next循环的一些细节》中说到了 For Next 循环的控制变量仅仅在循环开始前求值一次,但是其中存在一处陷阱
收藏 0 赞 0 分享
查看更多