VBS 两数相加取值问题分析_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

时间: 2024-10-02 12:10:50

VBS 两数相加取值问题分析_vbs的相关文章

Two Sum:两数相加

[ 问题: ] Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please no

aspnet-asp.net两个项目后台在cs文件里怎么用cookies传值 取值是固定的

问题描述 asp.net两个项目后台在cs文件里怎么用cookies传值 取值是固定的 取值的项目 被编译过了 代码改不了 下面是取值代码 存值 long p_UserId = Convert.ToInt64(Cookies.Read("Clerk", "CurOrganID")); int p_Degree = Convert.ToInt32(Cookies.Read("Clerk", "Degree")); base.Cl

两个超大数相加算法

#include <stdio.h> #include <string.h> #include <stdlib.h> /************************************************************************/ /* 功能:实现两个超大数相加 /* 参数:source1 -- 被加数,字符型数组,如12 /* source2 -- 加数,字符型数组, /* result -- 存放和,字符型数组 /********

mybatis-Spring+Mybatis从两张表中取值并传值到页面 分页

问题描述 Spring+Mybatis从两张表中取值并传值到页面 分页 我写的Dao //根据登陆ID查询直属下属 (分页) List> findByid(String id,RowBounds rowBounds); 对应的mapper SELECT u.user_code,a.totasalar from c_user_info u JOIN c_attence_info aON u.id=a.relatedid where department=(SELECT department FRO

class-现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的。

问题描述 现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的. 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 解决方案 double a=1.2345; a=int(a*100)/100.0; 解决方案二: 在java里面没有四舍五入,c,c++才有. java a=int(a*100+0.5)/100.0; 这种很快捷 C 直接输出system.out.printf("%2.

arraylist-C#如何将两个数组按照相应的取值规律合并

问题描述 C#如何将两个数组按照相应的取值规律合并 有两个数组,arraylist[m]1和arraylist[m]2,m>1,要合并成arraylist[2m]按照如下方法插入值,求大神帮忙想想 解决方案 for(int i = 0; i < m; i ++) { if(i%2 == 0) { listM.Add(listM1[i]); listM.Add(listM2[m - 1 - i]); } else { listM.Add(listM2[m - 1 - i]); listM.Add

求教,一个页面两个表单第一个可以取值第二个就不行了

问题描述 求教,一个页面两个表单第一个可以取值第二个就不行了 第一个表单通过$("#xx").val可以取到 但是第二个取到的内容就是undefined 希望求解答 解决方案 选择器有问题,没有找到元素,检查是否存在选择器对应的元素

c++-两个double数相加除2小数部分竟然被截断?

问题描述 两个double数相加除2小数部分竟然被截断? 解决方案 输出为 100001 解决方案二: (double)((a+b)/2)这样呢 解决方案三: 所以还是标准IO好使.. 解决方案四: 2.0前面也加个double,然后最后结果前面也加个double 解决方案五: double a = 100000.0; double b = 100001.0; double c = ((a+b)*1.0)/2.0;这么写 解决方案六: 加上#include 这个头文件,然后在输出那改成这样:co

C++程序设计实践学材系列(19)——1.4.2 输出两数中大值程序的其他写法

回到系列文章的目录--[系列文章目录] 回到本章目录--[第1章目录] 1.4.2 输出两数中大值程序的其他写法 例1.4 输入两个整数,求这两数中的大者并输出采取的思路是: 输入a.b的值 根据a.b的大小关系,为m赋值其中的大者 输出m的值 还可以写出下面的程序: //例程ch1-7.cpp #include <iostream> using namespace std; int main( ) { int a,b; cout<<"请输入a.b的值:"; c