VBS 两数相加取值问题分析

一个昵称为预言家晚报的朋友很喜欢玩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

时间: 2011-03-16

dataframe设置两个条件取值的实例

如下所示: >>> import pandas as pd >>> import numpy as np >>> from pandas import Series, DataFrame >>> df = DataFrame({'name':['a','a','b','b'],'classes':[1,2,3,4],'price':[11,22,33,44]}) >>> df classes name price 0

hashtable桶数通常会取一个素数分析

为什么一般hashtable的桶数会取一个素数 设有一个哈希函数 H( c ) = c % N; 当N取一个合数时,最简单的例子是取2^n,比如说取2^3=8,这时候 H( 11100(二进制) ) = H( 28 ) = 4 H( 10100(二进制) ) = H( 20 )= 4 这时候c的二进制第4位(从右向左数)就"失效"了,也就是说,无论第c的4位取什么值,都会导致H( c )的值一样.这时候c的第四位就根本不参与H( c )的运算,这样H( c )就无法完整地反映c的特性,

python 字典中取值的两种方法小结

如下所示: a={'name':'tony','sex':'male'} 获得name的值的方式有两种 print a['name'],type(a['name']) print a.get('name'),type(a.get('name')) 发现这两个结果完全一致,并没有任何的差异. 怎么选择这两个不同的字典取值方式呢? 如果字典已知,我们可以任选一个,而当我们不确定字典中是否存在某个键时,我之前的做法如下 if 'age' in a.keys(): print a['age'] 因为不先

jQuery实现条件搜索查询、实时取值及升降序排序的方法分析

本文实例讲述了jQuery实现条件搜索查询.实时取值及升降序排序的方法.分享给大家供大家参考,具体如下: 一.鼠标点击获取搜索条件中的被选中的值 创建方法  getAttrValue() 方法,每次的 .click 都要调用  function  getAttrValue(){} 例如,把选中的值给到属性 data-value .只需要每次点击,获取 li.active 的子集  a 的 .attr("data-value")即可 eg: var pubTime = $(getArr[

微信小程序实现同一页面取值的方法分析

本文实例讲述了微信小程序实现同一页面取值的方法.分享给大家供大家参考,具体如下: 1.js里单个的值在wxml里取值方法:js里将该值定义为全局变量,在wxml里采用 {{ }}即可获取. 实例: js里得值: data{ schoolName:"清华大学" } wxml里获取: <view class="texts">{{schoolName}}</view> 2.js里数组或是集合在wxml里的取值方法:js里将该集合或数组定义为全局变量

微信小程序页面间传值与页面取值操作实例分析

本文实例讲述了微信小程序页面间传值与页面取值操作.分享给大家供大家参考,具体如下: 微信小程序页面间传值 1.js页面间的传值:url: ' 路径 ? 值='+ 获取该页面取值, 实例1: pageSkip :function(){ wx.navigateTo({ url: '/page/login/facte?shopsName='+this.data.shopsName, }) }, 实例2: pageSkip :function(){ wx.navigateTo({ url: '/page

python如何求解两数的最大公约数

题目: 给定两个自然数,求这两个数的最大公约数. 分析: 单看题目的话,非常简单,我们可以循环遍历自然数,如果能够整除两个自然数,就把这个数记下来,在这些记录中找到最大的一个. 但是这样做有几个缺点:一是做除法计算量比较大,二是遍历所有自然数完全没有必要.另外,如果能够循环,还是不要递归,因为Python的函数递归最大栈空间是1000(如果我没有记错的话),如果数字大一些,很容易出现爆栈. 所以在这里有两种处理方法: 1.如果较大的自然数除较小的一个自然数,取得余数,较小的自然数和余数的最大公约

java如何交换这两个变量的值方法介绍

1.借助中间量交换 int x = 10; int y = 20; int temp = x; x = y; y = temp; 此种方法可以将中间量看成空杯,即把temp看成是空杯, 把x看成是装有白酒的杯子,把y看成是装有红酒的杯子 int temp = x; 把白酒倒到空杯中,此时temp装有白酒,x变成空杯 x = y; 把y中的红酒倒到x空杯中,此时x装有红酒,y变成空杯 y = temp; 把白酒倒到y空杯中,此时x装有红酒,y装有白酒,实现x和y的互换 2.数值相加减交换 int

C#中float的取值范围和精度分析

本文实例分析了C#中float的取值范围和精度.分享给大家供大家参考.具体分析如下: float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double. 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示: float x = 3.5F; 如果在以上声明中不使用后缀,则会因为您尝试将一个 double值存储到 float 变量中而发生编译错误. float的取值范围 float占用4个字节,和int是一样,也就是32bit. 1bit(符号位) 8bits(指数位)