找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4417|回复: 6

【Android】安卓APP->进制计算器

[复制链接]
发表于 2014-12-31 01:21:22 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
这个进制计算器的作用就是用于转换进制。支持的进制很多,从2开始,到36,也就是最小二进制,最高支持到36进制。低于十的数字用0123456789表示,而从十开始,则用ABCDEF等字母来表示。因为总共10个数字字符,26个英文字母,因此最高支持到36进制。(因为不知道超过36的数字用什么来表示。兴许可以弄一个中文表示法,来表示更多的进位制。)
这是截图,无视右上角的“中国移不动”吧。其中第一个文本框用于输入要转换的数字,反正只要字符和对应的进制对应就行了。然后就是输入数字的进位制、输出数字的进位制。
输入好以后,点“计算”,就能算出结果来了。
Screenshot_2014-12-30-23-59-05.png
源代码:
  1. package com.Xaa55.numsysconv;

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.EditText;
  6. import android.widget.Toast;

  7. public class MainActivity extends Activity
  8. {
  9.         EditText etInput,etOutput,etInputSystem,etOutputSystem;
  10.         @Override
  11.         protected void onCreate(Bundle savedInstanceState)
  12.         {
  13.                 super.onCreate(savedInstanceState);
  14.                 setContentView(R.layout.activity_main);
  15.                 etInput=(EditText)findViewById(R.id.etInput);
  16.                 etOutput=(EditText)findViewById(R.id.etOutput);
  17.                 etInputSystem=(EditText)findViewById(R.id.etInputSystem);
  18.                 etOutputSystem=(EditText)findViewById(R.id.etOutputSystem);
  19.         }
  20.         //进行计算的程序
  21.         public void Calc(View view)
  22.         {
  23.                 String StringInput;//输入的数字字符串
  24.                 int cbInput;//输入的数字字符串的长度
  25.                 String StringInputSystem;//输入的进制数字符串
  26.                 String StringOutputSystem;//输出的进制数字符串
  27.                 int InputSystem;//输入的进制数
  28.                 int OutputSystem;//输出的进制数
  29.                 int i=0,j=0,k=0;

  30.                 //读取输入的进制数字符串
  31.                 StringInputSystem=etInputSystem.getText().toString();
  32.                 if(StringInputSystem.length()==0)
  33.                 {
  34.                         Toast.makeText(this,"请输入进位制。",Toast.LENGTH_SHORT).show();
  35.                         return;
  36.                 }

  37.                 //读取输出的进制数字符串
  38.                 StringOutputSystem=etOutputSystem.getText().toString();
  39.                 if(StringOutputSystem.length()==0)
  40.                 {
  41.                         Toast.makeText(this,"请输入进位制。",Toast.LENGTH_SHORT).show();
  42.                         return;
  43.                 }

  44.                 //读取输入的数字字符串
  45.                 StringInput=etInput.getText().toString();
  46.                 StringInput.trim();
  47.                 char InputChars[]=StringInput.toCharArray();
  48.                 cbInput=InputChars.length;
  49.                 if(cbInput<=0)
  50.                 {
  51.                         Toast.makeText(this, "请输入数字,谢谢。"        , Toast.LENGTH_SHORT).show();
  52.                         return;
  53.                 }

  54.                 InputSystem=Integer.parseInt(StringInputSystem);//输入的进制数
  55.                 OutputSystem=Integer.parseInt(StringOutputSystem);//输出的进制数
  56.                 if(InputSystem>36||OutputSystem>36)
  57.                 {
  58.                         Toast.makeText(this,
  59.                                                    "本程序不支持超过36进制的数字的运算,因为不知道超出的部分要用什么符号表示。",
  60.                                                    Toast.LENGTH_SHORT).show();
  61.                         return;
  62.                 }
  63.                 if(InputSystem<2||OutputSystem<2)
  64.                 {
  65.                         Toast.makeText(this,"1进制?0进制?你想太多了吧。。。",
  66.                                                    Toast.LENGTH_SHORT).show();
  67.                         return;
  68.                 }

  69.                 char InputValues[]=new char[cbInput],ch;
  70.                 for (;i<cbInput;i++)
  71.                 {
  72.                         if(InputChars[i]>='a' && InputChars[i]<='z')
  73.                                 ch=(char)(InputChars[i]-'a'+10);
  74.                         else if(InputChars[i]>='A' && InputChars[i]<='Z')
  75.                                 ch=(char)(InputChars[i]-'A'+10);
  76.                         else if(InputChars[i]>='0' && InputChars[i]<='9')
  77.                                 ch=(char)(InputChars[i]-'0');
  78.                         else if (InputChars[i]=='.')
  79.                         {
  80.                                 Toast.makeText(this,"暂不支持小数运算。",Toast.LENGTH_SHORT).show();
  81.                                 return;
  82.                         }
  83.                         else
  84.                         {
  85.                                 etInput.setSelection(i, i+1);
  86.                                 Toast.makeText(this, "输入的数字不合法。"        , Toast.LENGTH_SHORT).show();
  87.                                 return;
  88.                         }
  89.                         if(ch>=InputSystem)
  90.                         {
  91.                                 etInput.setSelection(i,i+1);
  92.                                 Toast.makeText(this,"输入的数字不合法。",Toast.LENGTH_SHORT).show();
  93.                                 return;
  94.                         }
  95.                         InputValues[j++]=ch;
  96.                 }
  97.                 String strOut="";
  98.                 do
  99.                 {
  100.                         for(j=i=ch=0;i<cbInput;i++)
  101.                         {
  102.                                 k=j*InputSystem+InputValues[i];
  103.                                 InputValues[i]=(char)(k/OutputSystem);
  104.                                 j=k%OutputSystem;
  105.                                 ch|=InputValues[i];
  106.                         }
  107.                         if(j<10)
  108.                                 strOut=j+strOut;
  109.                         else
  110.                                 strOut=String.valueOf((char)(j-10+'A'))+strOut;
  111.                 }while(ch!=0);
  112.                 etOutput.setText(strOut);
  113.         }
  114. }
复制代码
最后这几行代码是关键,从第76行开始,是处理输入的字符串,然后将其转换为数字。第105行开始是把数字再按照指定的进制进行转换,然后输出。
感觉Android Studio还是挺方便的。虽然对于我总是要翻墙下载完整的SDK才愿意开始开发(硬盘大,所以才任性)
顺带吐槽一下Android Studio使用新宋体会有ClearType的效果!天啊实在是受不了了。只能用Courier New了。还有就是我习惯把{放在新行,否则也很不爽
BIN: app-release.apk (872.32 KB, 下载次数: 3)
SRC: NumSysConverter.7z (3.75 MB, 下载次数: 2, 售价: 10 个宅币)
回复

使用道具 举报

 楼主| 发表于 2014-12-31 01:31:19 | 显示全部楼层
確かに、写小程序用Java也确实省时省力哈。
回复 赞! 靠!

使用道具 举报

发表于 2014-12-31 19:17:36 | 显示全部楼层
{:soso_e179:} 哈哈哈哈!好!跟风发一个:
  1. VERSION 5.00
  2. Begin VB.Form Form1
  3.    BorderStyle     =   1  'Fixed Single
  4.    Caption         =   "SCAL"
  5.    ClientHeight    =   4305
  6.    ClientLeft      =   45
  7.    ClientTop       =   375
  8.    ClientWidth     =   4545
  9.    Icon            =   "Form1.frx":0000
  10.    LinkTopic       =   "Form1"
  11.    MaxButton       =   0   'False
  12.    ScaleHeight     =   4305
  13.    ScaleWidth      =   4545
  14.    StartUpPosition =   2  '屏幕中心
  15.    Begin VB.CommandButton Command3
  16.       Caption         =   "&X"
  17.       BeginProperty Font
  18.          Name            =   "宋体"
  19.          Size            =   9
  20.          Charset         =   134
  21.          Weight          =   700
  22.          Underline       =   0   'False
  23.          Italic          =   0   'False
  24.          Strikethrough   =   0   'False
  25.       EndProperty
  26.       Height          =   375
  27.       Left            =   3600
  28.       TabIndex        =   28
  29.       ToolTipText     =   "清空"
  30.       Top             =   120
  31.       Width           =   375
  32.    End
  33.    Begin VB.Frame Frame2
  34.       Caption         =   "单位转换"
  35.       BeginProperty Font
  36.          Name            =   "宋体"
  37.          Size            =   9
  38.          Charset         =   134
  39.          Weight          =   700
  40.          Underline       =   0   'False
  41.          Italic          =   0   'False
  42.          Strikethrough   =   0   'False
  43.       EndProperty
  44.       Height          =   1695
  45.       Left            =   120
  46.       TabIndex        =   17
  47.       Top             =   2520
  48.       Width           =   4335
  49.       Begin VB.CommandButton Command4
  50.          Caption         =   "&D"
  51.          BeginProperty Font
  52.             Name            =   "宋体"
  53.             Size            =   9
  54.             Charset         =   134
  55.             Weight          =   700
  56.             Underline       =   0   'False
  57.             Italic          =   0   'False
  58.             Strikethrough   =   0   'False
  59.          EndProperty
  60.          Height          =   375
  61.          Left            =   3840
  62.          TabIndex        =   29
  63.          ToolTipText     =   "清空"
  64.          Top             =   240
  65.          Width           =   375
  66.       End
  67.       Begin VB.TextBox Text6
  68.          BackColor       =   &H8000000F&
  69.          BeginProperty Font
  70.             Name            =   "宋体"
  71.             Size            =   10.5
  72.             Charset         =   134
  73.             Weight          =   700
  74.             Underline       =   0   'False
  75.             Italic          =   0   'False
  76.             Strikethrough   =   0   'False
  77.          EndProperty
  78.          ForeColor       =   &H00FF0000&
  79.          Height          =   375
  80.          Left            =   1080
  81.          Locked          =   -1  'True
  82.          TabIndex        =   25
  83.          Text            =   "0"
  84.          Top             =   1200
  85.          Width           =   3135
  86.       End
  87.       Begin VB.ComboBox Combo2
  88.          BeginProperty Font
  89.             Name            =   "宋体"
  90.             Size            =   10.5
  91.             Charset         =   134
  92.             Weight          =   700
  93.             Underline       =   0   'False
  94.             Italic          =   0   'False
  95.             Strikethrough   =   0   'False
  96.          EndProperty
  97.          ForeColor       =   &H00000080&
  98.          Height          =   330
  99.          Left            =   2760
  100.          Style           =   2  'Dropdown List
  101.          TabIndex        =   23
  102.          Top             =   720
  103.          Width           =   1455
  104.       End
  105.       Begin VB.ComboBox Combo1
  106.          BeginProperty Font
  107.             Name            =   "宋体"
  108.             Size            =   10.5
  109.             Charset         =   134
  110.             Weight          =   700
  111.             Underline       =   0   'False
  112.             Italic          =   0   'False
  113.             Strikethrough   =   0   'False
  114.          EndProperty
  115.          ForeColor       =   &H00008000&
  116.          Height          =   330
  117.          Left            =   1080
  118.          Style           =   2  'Dropdown List
  119.          TabIndex        =   21
  120.          Top             =   720
  121.          Width           =   1455
  122.       End
  123.       Begin VB.TextBox Text5
  124.          BeginProperty Font
  125.             Name            =   "宋体"
  126.             Size            =   10.5
  127.             Charset         =   134
  128.             Weight          =   700
  129.             Underline       =   0   'False
  130.             Italic          =   0   'False
  131.             Strikethrough   =   0   'False
  132.          EndProperty
  133.          Height          =   375
  134.          Left            =   1080
  135.          TabIndex        =   19
  136.          Text            =   "0"
  137.          Top             =   240
  138.          Width           =   2775
  139.       End
  140.       Begin VB.Label Label4
  141.          AutoSize        =   -1  'True
  142.          Caption         =   "输出(&O):"
  143.          BeginProperty Font
  144.             Name            =   "宋体"
  145.             Size            =   9
  146.             Charset         =   134
  147.             Weight          =   700
  148.             Underline       =   0   'False
  149.             Italic          =   0   'False
  150.             Strikethrough   =   0   'False
  151.          EndProperty
  152.          Height          =   180
  153.          Index           =   1
  154.          Left            =   120
  155.          TabIndex        =   24
  156.          Top             =   1320
  157.          Width           =   810
  158.       End
  159.       Begin VB.Label Label3
  160.          AutoSize        =   -1  'True
  161.          Caption         =   "到"
  162.          BeginProperty Font
  163.             Name            =   "宋体"
  164.             Size            =   9
  165.             Charset         =   134
  166.             Weight          =   700
  167.             Underline       =   0   'False
  168.             Italic          =   0   'False
  169.             Strikethrough   =   0   'False
  170.          EndProperty
  171.          Height          =   180
  172.          Index           =   1
  173.          Left            =   2520
  174.          TabIndex        =   22
  175.          Top             =   840
  176.          Width           =   195
  177.       End
  178.       Begin VB.Label Label2
  179.          AutoSize        =   -1  'True
  180.          Caption         =   "单位(&S):"
  181.          BeginProperty Font
  182.             Name            =   "宋体"
  183.             Size            =   9
  184.             Charset         =   134
  185.             Weight          =   700
  186.             Underline       =   0   'False
  187.             Italic          =   0   'False
  188.             Strikethrough   =   0   'False
  189.          EndProperty
  190.          Height          =   180
  191.          Index           =   1
  192.          Left            =   120
  193.          TabIndex        =   20
  194.          Top             =   840
  195.          Width           =   810
  196.       End
  197.       Begin VB.Label Label1
  198.          AutoSize        =   -1  'True
  199.          Caption         =   "输入(&I):"
  200.          BeginProperty Font
  201.             Name            =   "宋体"
  202.             Size            =   9
  203.             Charset         =   134
  204.             Weight          =   700
  205.             Underline       =   0   'False
  206.             Italic          =   0   'False
  207.             Strikethrough   =   0   'False
  208.          EndProperty
  209.          Height          =   180
  210.          Index           =   1
  211.          Left            =   120
  212.          TabIndex        =   18
  213.          Top             =   360
  214.          Width           =   810
  215.       End
  216.    End
  217.    Begin VB.CheckBox Check2
  218.       Height          =   375
  219.       Left            =   4080
  220.       Picture         =   "Form1.frx":0CCA
  221.       Style           =   1  'Graphical
  222.       TabIndex        =   13
  223.       ToolTipText     =   "工具"
  224.       Top             =   1080
  225.       Width           =   375
  226.    End
  227.    Begin VB.Frame Frame1
  228.       Caption         =   "设置"
  229.       BeginProperty Font
  230.          Name            =   "宋体"
  231.          Size            =   9
  232.          Charset         =   134
  233.          Weight          =   700
  234.          Underline       =   0   'False
  235.          Italic          =   0   'False
  236.          Strikethrough   =   0   'False
  237.       EndProperty
  238.       Height          =   735
  239.       Left            =   120
  240.       TabIndex        =   12
  241.       Top             =   1680
  242.       Width           =   4335
  243.       Begin VB.CommandButton Command2
  244.          Caption         =   "&R"
  245.          BeginProperty Font
  246.             Name            =   "宋体"
  247.             Size            =   9
  248.             Charset         =   134
  249.             Weight          =   700
  250.             Underline       =   0   'False
  251.             Italic          =   0   'False
  252.             Strikethrough   =   0   'False
  253.          EndProperty
  254.          Height          =   375
  255.          Left            =   3840
  256.          TabIndex        =   16
  257.          ToolTipText     =   "复位"
  258.          Top             =   240
  259.          Width           =   375
  260.       End
  261.       Begin VB.TextBox Text4
  262.          BackColor       =   &H0000C0C0&
  263.          BeginProperty Font
  264.             Name            =   "宋体"
  265.             Size            =   10.5
  266.             Charset         =   134
  267.             Weight          =   700
  268.             Underline       =   0   'False
  269.             Italic          =   0   'False
  270.             Strikethrough   =   0   'False
  271.          EndProperty
  272.          ForeColor       =   &H00FFFFFF&
  273.          Height          =   375
  274.          Left            =   2160
  275.          TabIndex        =   15
  276.          Text            =   "10"
  277.          Top             =   240
  278.          Width           =   1335
  279.       End
  280.       Begin VB.Label Label5
  281.          AutoSize        =   -1  'True
  282.          Caption         =   "位"
  283.          BeginProperty Font
  284.             Name            =   "宋体"
  285.             Size            =   9
  286.             Charset         =   134
  287.             Weight          =   700
  288.             Underline       =   0   'False
  289.             Italic          =   0   'False
  290.             Strikethrough   =   0   'False
  291.          EndProperty
  292.          Height          =   180
  293.          Index           =   1
  294.          Left            =   3600
  295.          TabIndex        =   27
  296.          Top             =   360
  297.          Width           =   195
  298.       End
  299.       Begin VB.Label Label5
  300.          AutoSize        =   -1  'True
  301.          Caption         =   "小数精度(&A):小数点后"
  302.          BeginProperty Font
  303.             Name            =   "宋体"
  304.             Size            =   9
  305.             Charset         =   134
  306.             Weight          =   700
  307.             Underline       =   0   'False
  308.             Italic          =   0   'False
  309.             Strikethrough   =   0   'False
  310.          EndProperty
  311.          Height          =   180
  312.          Index           =   0
  313.          Left            =   120
  314.          TabIndex        =   14
  315.          Top             =   360
  316.          Width           =   1980
  317.       End
  318.    End
  319.    Begin VB.CheckBox Check1
  320.       Caption         =   "&T"
  321.       BeginProperty Font
  322.          Name            =   "宋体"
  323.          Size            =   9
  324.          Charset         =   134
  325.          Weight          =   700
  326.          Underline       =   0   'False
  327.          Italic          =   0   'False
  328.          Strikethrough   =   0   'False
  329.       EndProperty
  330.       Height          =   375
  331.       Left            =   4080
  332.       Style           =   1  'Graphical
  333.       TabIndex        =   11
  334.       ToolTipText     =   "窗口置顶"
  335.       Top             =   600
  336.       Width           =   375
  337.    End
  338.    Begin VB.CommandButton Command1
  339.       Caption         =   "&?"
  340.       BeginProperty Font
  341.          Name            =   "宋体"
  342.          Size            =   9
  343.          Charset         =   134
  344.          Weight          =   700
  345.          Underline       =   0   'False
  346.          Italic          =   0   'False
  347.          Strikethrough   =   0   'False
  348.       EndProperty
  349.       Height          =   375
  350.       Left            =   4080
  351.       TabIndex        =   10
  352.       ToolTipText     =   "关于"
  353.       Top             =   120
  354.       Width           =   375
  355.    End
  356.    Begin VB.TextBox Text3
  357.       BackColor       =   &H8000000F&
  358.       BeginProperty Font
  359.          Name            =   "宋体"
  360.          Size            =   10.5
  361.          Charset         =   134
  362.          Weight          =   700
  363.          Underline       =   0   'False
  364.          Italic          =   0   'False
  365.          Strikethrough   =   0   'False
  366.       EndProperty
  367.       ForeColor       =   &H00FF0000&
  368.       Height          =   375
  369.       Left            =   960
  370.       Locked          =   -1  'True
  371.       TabIndex        =   9
  372.       Text            =   "0"
  373.       Top             =   1080
  374.       Width           =   2655
  375.    End
  376.    Begin VB.VScrollBar VScroll1
  377.       Height          =   375
  378.       Index           =   1
  379.       Left            =   3720
  380.       Max             =   36
  381.       Min             =   2
  382.       TabIndex        =   7
  383.       Top             =   600
  384.       Value           =   10
  385.       Width           =   255
  386.    End
  387.    Begin VB.TextBox Text2
  388.       BackColor       =   &H00000080&
  389.       BeginProperty Font
  390.          Name            =   "宋体"
  391.          Size            =   10.5
  392.          Charset         =   134
  393.          Weight          =   700
  394.          Underline       =   0   'False
  395.          Italic          =   0   'False
  396.          Strikethrough   =   0   'False
  397.       EndProperty
  398.       ForeColor       =   &H00FFFFFF&
  399.       Height          =   375
  400.       Index           =   1
  401.       Left            =   2640
  402.       TabIndex        =   6
  403.       Text            =   "10"
  404.       Top             =   600
  405.       Width           =   1095
  406.    End
  407.    Begin VB.VScrollBar VScroll1
  408.       Height          =   375
  409.       Index           =   0
  410.       Left            =   2040
  411.       Max             =   36
  412.       Min             =   2
  413.       TabIndex        =   4
  414.       Top             =   600
  415.       Value           =   10
  416.       Width           =   255
  417.    End
  418.    Begin VB.TextBox Text2
  419.       BackColor       =   &H00008000&
  420.       BeginProperty Font
  421.          Name            =   "宋体"
  422.          Size            =   10.5
  423.          Charset         =   134
  424.          Weight          =   700
  425.          Underline       =   0   'False
  426.          Italic          =   0   'False
  427.          Strikethrough   =   0   'False
  428.       EndProperty
  429.       ForeColor       =   &H00FFFFFF&
  430.       Height          =   375
  431.       Index           =   0
  432.       Left            =   960
  433.       TabIndex        =   3
  434.       Text            =   "10"
  435.       Top             =   600
  436.       Width           =   1095
  437.    End
  438.    Begin VB.TextBox Text1
  439.       BeginProperty Font
  440.          Name            =   "宋体"
  441.          Size            =   10.5
  442.          Charset         =   134
  443.          Weight          =   700
  444.          Underline       =   0   'False
  445.          Italic          =   0   'False
  446.          Strikethrough   =   0   'False
  447.       EndProperty
  448.       ForeColor       =   &H00000000&
  449.       Height          =   375
  450.       Left            =   960
  451.       TabIndex        =   1
  452.       Text            =   "0"
  453.       Top             =   120
  454.       Width           =   2655
  455.    End
  456.    Begin VB.Label Label6
  457.       Alignment       =   2  'Center
  458.       BorderStyle     =   1  'Fixed Single
  459.       BeginProperty Font
  460.          Name            =   "宋体"
  461.          Size            =   7.5
  462.          Charset         =   134
  463.          Weight          =   700
  464.          Underline       =   0   'False
  465.          Italic          =   0   'False
  466.          Strikethrough   =   0   'False
  467.       EndProperty
  468.       ForeColor       =   &H00FF0000&
  469.       Height          =   375
  470.       Left            =   3600
  471.       TabIndex        =   26
  472.       Top             =   1080
  473.       Width           =   375
  474.    End
  475.    Begin VB.Label Label4
  476.       AutoSize        =   -1  'True
  477.       Caption         =   "输出(&O):"
  478.       BeginProperty Font
  479.          Name            =   "宋体"
  480.          Size            =   9
  481.          Charset         =   134
  482.          Weight          =   700
  483.          Underline       =   0   'False
  484.          Italic          =   0   'False
  485.          Strikethrough   =   0   'False
  486.       EndProperty
  487.       Height          =   180
  488.       Index           =   0
  489.       Left            =   120
  490.       TabIndex        =   8
  491.       Top             =   1200
  492.       Width           =   810
  493.    End
  494.    Begin VB.Label Label3
  495.       AutoSize        =   -1  'True
  496.       Caption         =   "到"
  497.       BeginProperty Font
  498.          Name            =   "宋体"
  499.          Size            =   9
  500.          Charset         =   134
  501.          Weight          =   700
  502.          Underline       =   0   'False
  503.          Italic          =   0   'False
  504.          Strikethrough   =   0   'False
  505.       EndProperty
  506.       Height          =   180
  507.       Index           =   0
  508.       Left            =   2400
  509.       TabIndex        =   5
  510.       Top             =   720
  511.       Width           =   195
  512.    End
  513.    Begin VB.Label Label2
  514.       AutoSize        =   -1  'True
  515.       Caption         =   "进制(&S):"
  516.       BeginProperty Font
  517.          Name            =   "宋体"
  518.          Size            =   9
  519.          Charset         =   134
  520.          Weight          =   700
  521.          Underline       =   0   'False
  522.          Italic          =   0   'False
  523.          Strikethrough   =   0   'False
  524.       EndProperty
  525.       Height          =   180
  526.       Index           =   0
  527.       Left            =   120
  528.       TabIndex        =   2
  529.       Top             =   720
  530.       Width           =   810
  531.    End
  532.    Begin VB.Label Label1
  533.       AutoSize        =   -1  'True
  534.       Caption         =   "输入(&I):"
  535.       BeginProperty Font
  536.          Name            =   "宋体"
  537.          Size            =   9
  538.          Charset         =   134
  539.          Weight          =   700
  540.          Underline       =   0   'False
  541.          Italic          =   0   'False
  542.          Strikethrough   =   0   'False
  543.       EndProperty
  544.       Height          =   180
  545.       Index           =   0
  546.       Left            =   120
  547.       TabIndex        =   0
  548.       Top             =   240
  549.       Width           =   810
  550.    End
  551. End
  552. Attribute VB_Name = "Form1"
  553. Attribute VB_GlobalNameSpace = False
  554. Attribute VB_Creatable = False
  555. Attribute VB_PredeclaredId = True
  556. Attribute VB_Exposed = False
  557. Option Explicit
  558. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

  559. Private Enum sConvA
  560.     A_Bit = 0
  561.     A_Byte = 1
  562.     A_KB = 2
  563.     A_MB = 3
  564.     A_GB = 4
  565.     A_TB = 5
  566. End Enum

  567. Private Function CboNameToNum(name As String) As Integer
  568.     Select Case name
  569.     Case "位(bit)"
  570.         CboNameToNum = 0
  571.     Case "字节(Byte)"
  572.         CboNameToNum = 1
  573.     Case "千字节(KB)"
  574.         CboNameToNum = 2
  575.     Case "兆字节(MB)"
  576.         CboNameToNum = 3
  577.     Case "吉字节(GB)"
  578.         CboNameToNum = 4
  579.     Case "太字节(TB)"
  580.         CboNameToNum = 5
  581.     End Select
  582. End Function

  583. Private Function AnyToKB(ress As sConvA, inNum As Double) As Double
  584.     On Error GoTo EH_ATK:
  585.     Select Case ress
  586.     Case 0
  587.         AnyToKB = 1 / (8 * 1024) * inNum
  588.     Case 1
  589.         AnyToKB = 1 / 1024 * inNum
  590.     Case 2
  591.         AnyToKB = inNum
  592.     Case 3
  593.         AnyToKB = 1024 * inNum
  594.     Case 4
  595.         AnyToKB = 1024 ^ 2 * inNum
  596.     Case 5
  597.         AnyToKB = 1024 ^ 3 * inNum
  598.     End Select
  599.     Exit Function
  600. EH_ATK:
  601.     AnyToKB = 0
  602. End Function

  603. Private Function KBToAny(ress As sConvA, inNum As Double) As Double
  604.     On Error GoTo EH_KTA:
  605.     Select Case ress
  606.     Case 0
  607.         KBToAny = 1024 * 8 * inNum
  608.     Case 1
  609.         KBToAny = 1024 * inNum
  610.     Case 2
  611.         KBToAny = inNum
  612.     Case 3
  613.         KBToAny = 1 / 1024 * inNum
  614.     Case 4
  615.         KBToAny = 1 / (1024 ^ 2) * inNum
  616.     Case 5
  617.         KBToAny = 1 / (1024 ^ 3) * inNum
  618.     End Select
  619.     Exit Function
  620. EH_KTA:
  621.     KBToAny = "错误"
  622. End Function

  623. Private Function DecToAny(sScal As Integer, aCC As Long, inNum As String) As String
  624.     On Error GoTo EH_DTA:
  625.     Dim numPart() As String
  626.     Dim tMod As Long, tN As Double
  627.     Dim ts As String, ts2 As String
  628.     Dim i As Long
  629.     Dim intPart As String, floatPart As String
  630.     If Len(inNum) = 0 Then Exit Function
  631.     numPart = Split(UCase(inNum), ".")
  632.     intPart = vbNullString: tN = Val(numPart(0)): ts = vbNullString
  633.     Do
  634.         tMod = tN Mod sScal
  635.         tN = Int(tN / sScal)
  636.         
  637.         ts2 = CStr(tMod)
  638.         If Len(ts2) >= 2 Then ts2 = Chr(Int(ts2) + 55)
  639.         ts = ts & ts2
  640.     Loop While tN >= 1
  641.     intPart = StrReverse(ts)
  642.    
  643.     If InStr(inNum, ".") Then
  644.         floatPart = vbNullString: tN = CDbl("0." & numPart(1)): ts = vbNullString: ts2 = vbNullString
  645.         For i = 1 To aCC
  646.             If tN = Int(tN) Then Exit For
  647.             tN = tN * sScal
  648.             ts2 = CStr(Int(tN))
  649.             If Len(ts2) >= 2 Then ts2 = Chr(Int(ts2) + 55)
  650.             ts = ts & ts2
  651.             
  652.             If InStr(CStr(tN), ".") Then tN = CDbl("." & Split(CStr(tN), ".")(1))
  653.         Next
  654.         floatPart = "." & ts
  655.     End If
  656.     DecToAny = intPart & floatPart
  657.     Exit Function
  658. EH_DTA:
  659.     DecToAny = "错误"
  660. End Function

  661. Private Function AnyToDec(sScal As Integer, inNum As String) As String
  662.     On Error GoTo EH_ATD:
  663.     Dim numPart() As String
  664.     Dim i As Long, j As Long
  665.     Dim ts As String
  666.     Dim intPart As Long, floatPart As Double
  667.     If Len(inNum) = 0 Then Exit Function
  668.     numPart = Split(UCase(inNum), ".")
  669.     intPart = 0: j = 0
  670.     For i = Len(numPart(0)) - 1 To 0 Step -1
  671.         ts = Mid(numPart(0), i + 1, 1)
  672.         If Asc(ts) >= 65 And Asc(ts) <= 90 Then ts = CStr(Asc(ts) - 55)
  673.         intPart = intPart + sScal ^ j * Int(ts)
  674.         j = j + 1
  675.     Next
  676.     j = 0: floatPart = 0
  677.     If InStr(inNum, ".") Then
  678.         For i = 1 To Len(numPart(1))
  679.             ts = Mid(numPart(1), i, 1)
  680.             If Asc(ts) >= 65 And Asc(ts) <= 90 Then ts = CStr(Asc(ts) - 55)
  681.             floatPart = floatPart + sScal ^ -i * Int(ts)
  682.         Next
  683.     End If
  684.     AnyToDec = CStr(intPart + floatPart)
  685.     Exit Function
  686. EH_ATD:
  687.     AnyToDec = "错误"
  688. End Function


  689. Private Function IsLawful(a As String, scal As Integer) As Boolean
  690.     If Asc(a) < 48 Or Asc(a) > 57 Then
  691.         If (Asc(UCase(a)) - 54) > scal Then IsLawful = False Else IsLawful = True
  692.     Else
  693.         If (Asc(a) - 47) > scal Then IsLawful = False Else IsLawful = True
  694.     End If
  695. End Function

  696. Private Function InFloOnly(keyNum As Integer) As Boolean
  697.     If (keyNum >= 48 And keyNum <= 57) Or keyNum = 8 Or keyNum = 16 Or keyNum = 46 Then
  698.         InFloOnly = True
  699.     Else
  700.         InFloOnly = False
  701.     End If
  702. End Function

  703. Private Function InIntOnly(keyNum As Integer) As Boolean
  704.     If (keyNum >= 48 And keyNum <= 57) Or keyNum = 8 Or keyNum = 16 Then
  705.         InIntOnly = True
  706.     Else
  707.         InIntOnly = False
  708.     End If
  709. End Function

  710. Private Function InNumOnly(keyNum As Integer) As Boolean
  711.     If (keyNum >= 48 And keyNum <= 57) Or (keyNum >= 65 And keyNum <= 90) Or (keyNum >= 97 And keyNum <= 122) Or keyNum = 45 Or keyNum = 8 Or keyNum = 16 Or keyNum = 46 Then
  712.         InNumOnly = True
  713.     Else
  714.         InNumOnly = False
  715.     End If
  716. End Function

  717. Private Sub Check1_Click()
  718.     If Check1.Value = 1 Then
  719.         SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3
  720.     Else
  721.         SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, 3
  722.     End If
  723. End Sub

  724. Private Sub Check2_Click()
  725.     If Check2.Value = 1 Then
  726.         Me.Height = 4725
  727.     Else
  728.         Me.Height = 1965
  729.     End If
  730. End Sub

  731. Private Sub Combo1_Click()
  732.     Call Text5_Change
  733. End Sub

  734. Private Sub Combo2_Click()
  735.     Call Text5_Change
  736. End Sub

  737. Private Sub Command1_Click()
  738.     Dim info As String
  739.     info = "SCAL v1.0" & vbCrLf
  740.     info = info & "Copyright (C) 2013 Ctechnology Corp." & vbCrLf
  741.     info = info & "PID:201309192151A" & vbCrLf
  742.     info = info & "Created By Cyycoish" & vbCrLf
  743.     info = info & "Email:cyycoish@hotmail.com" & vbCrLf
  744.     MsgBox info, , "About SCAL"
  745. End Sub

  746. Private Sub Command2_Click()
  747.     Text4.Text = "10"
  748. End Sub

  749. Private Sub Command3_Click()
  750.     Text1.Text = "0"
  751.     Text1.SelStart = 0
  752.     Text1.SelLength = Len(Text1.Text)
  753.     Text1.SetFocus
  754. End Sub

  755. Private Sub Command4_Click()
  756.     Text5.Text = "0"
  757.     Text5.SelStart = 0
  758.     Text5.SelLength = Len(Text5.Text)
  759.     Text5.SetFocus
  760. End Sub

  761. Private Sub Form_Load()
  762.     Text1.SelStart = 0
  763.     Text1.SelLength = Len(Text1.Text)
  764.     Me.Height = 1965
  765.     Label6.Caption = vbCrLf & Text2(1).Text
  766.    
  767.     Combo1.AddItem "位(bit)"
  768.     Combo1.AddItem "字节(Byte)"
  769.     Combo1.AddItem "千字节(KB)"
  770.     Combo1.AddItem "兆字节(MB)"
  771.     Combo1.AddItem "吉字节(GB)"
  772.     Combo1.AddItem "太字节(TB)"
  773.     Combo1.Text = Combo1.List(0)
  774.    
  775.     Combo2.AddItem "位(bit)"
  776.     Combo2.AddItem "字节(Byte)"
  777.     Combo2.AddItem "千字节(KB)"
  778.     Combo2.AddItem "兆字节(MB)"
  779.     Combo2.AddItem "吉字节(GB)"
  780.     Combo2.AddItem "太字节(TB)"
  781.     Combo2.Text = Combo2.List(0)
  782. End Sub

  783. Private Sub Text1_Change()
  784.     Dim i As Long
  785.     Dim ts As String
  786.     Dim j As Integer
  787.     j = 0
  788.     Text1.ForeColor = &H0&
  789.     For i = 1 To Len(Text1.Text)
  790.         ts = Mid(Text1.Text, i, 1)
  791.         If ts = "." Then j = j + 1
  792.         If j > 1 Then
  793.             Text1.SelStart = i - 1
  794.             Text1.SelLength = 1
  795.             Text1.ForeColor = &HFF&
  796.             Exit Sub
  797.         End If
  798.         If i <> 1 And ts = "-" Then
  799.             Text1.SelStart = i - 1
  800.             Text1.SelLength = 1
  801.             Text1.ForeColor = &HFF&
  802.             Exit Sub
  803.         End If
  804.         If IsLawful(ts, Int(Text2(0).Text)) = False Then
  805.             Text1.SelStart = i - 1
  806.             Text1.SelLength = 1
  807.             Text1.ForeColor = &HFF&
  808.             Exit Sub
  809.         End If
  810.     Next
  811.     Text3.Text = DecToAny(Int(Text2(1).Text), Int(Text4.Text), AnyToDec(Int(Text2(0).Text), Text1.Text))
  812. End Sub

  813. Private Sub Text1_KeyPress(KeyAscii As Integer)
  814.     If InNumOnly(KeyAscii) = False Then KeyAscii = 0
  815. End Sub

  816. Private Sub Text2_Change(Index As Integer)
  817.     If Val(Text2(Index).Text) > 36 Then Text2(Index).Text = "36"
  818.     If Int(Text2(Index).Text) > 1 Then Call Text1_Change
  819.     Label6.Caption = vbCrLf & Text2(1).Text
  820. End Sub

  821. Private Sub Text2_KeyPress(Index As Integer, KeyAscii As Integer)
  822.     If InIntOnly(KeyAscii) = False Then KeyAscii = 0
  823. End Sub

  824. Private Sub Text2_LostFocus(Index As Integer)
  825.     If Val(Text2(Index).Text) < 2 Then Text2(Index).Text = "2"
  826.     If Val(Text2(Index).Text) > 36 Then Text2(Index).Text = "36"
  827.     Call Text1_Change
  828. End Sub

  829. Private Sub Text4_Change()
  830.     If Text4.Text = vbNullString Or Val(Text4.Text) < 1 Then Text4.Text = "1"
  831.     If Int(Text4.Text) > 1 Then Call Text1_Change
  832. End Sub

  833. Private Sub Text4_KeyPress(KeyAscii As Integer)
  834.     If InIntOnly(KeyAscii) = False Then KeyAscii = 0
  835. End Sub

  836. Private Sub Text5_Change()
  837.     Text6.Text = KBToAny(CboNameToNum(Combo2.Text), AnyToKB(CboNameToNum(Combo1.Text), Val(Text5.Text)))
  838. End Sub

  839. Private Sub Text5_KeyPress(KeyAscii As Integer)
  840.     If InFloOnly(KeyAscii) = False Then KeyAscii = 0
  841. End Sub

  842. Private Sub VScroll1_Change(Index As Integer)
  843.     Text2(Index).Text = VScroll1(Index).Value
  844. End Sub
复制代码

回复 赞! 靠!

使用道具 举报

发表于 2014-12-31 19:20:01 | 显示全部楼层
浏览器bug,我发不了图了,大家把代码弄到frm文件中即可运行
回复 赞! 靠!

使用道具 举报

发表于 2014-12-31 19:25:02 | 显示全部楼层
补充一句,这个可以算小数
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2014-12-31 19:31:18 | 显示全部楼层
补充一句你这个只能在Windows上运行哦。
回复 赞! 靠!

使用道具 举报

发表于 2017-12-28 09:35:40 | 显示全部楼层
回复有宅币吗
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-12-22 21:06 , Processed in 0.057189 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表