2017-12-25 阳历转阴历、c# .net 中<% = %>,<% # %>等、Vue.js 模板语法、bootstrap、C#中float、double

第一组:陈辉 阳历转阴历的方法

最近用到了阳历转阴历的方法,当然是js;

网上的是通用的js方法代码如下,我竟然没有保存,然后就找不到了,但是我将它改造成angularJS1的代码如下:

//将阳历转成阴历

    $scope.madd=new Array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);  
    $scope.HsString="甲乙丙丁戊己庚辛壬癸"; 
    $scope.EbString = '子丑寅卯辰巳午未申酉戌亥';
    $scope.NumString = "一二三四五六七八九十";
    $scope.MonString = "正二三四五六七八九十冬腊";
    $scope.CalendarData = new Array(0xA4B, 0x5164B, 0x6A5, 0x6D4, 0x415B5, 0x2B6, 0x957, 
0x2092F, 0x497, 0x60C96, 0xD4A, 0xEA5, 0x50DA9, 0x5AD, 0x2B6, 0x3126E, 0x92E, 0x7192D, 
0xC95, 0xD4A, 0x61B4A, 0xB55, 0x56A, 0x4155B, 0x25D, 0x92D, 0x2192B, 0xA95, 0x71695, 0x6CA, 
0xB55, 0x50AB5, 0x4DA, 0xA5B, 0x30A57, 0x52B, 0x8152A, 0xE95, 0x6AA, 0x615AA, 0xAB5, 0x4B6, 
0x414AE, 0xA57, 0x526, 0x31D26, 0xD95, 0x70B55, 0x56A, 0x96D, 0x5095D, 0x4AD, 0xA4D, 
0x41A4D, 0xD25, 0x81AA5, 0xB54, 0xB6A, 0x612DA, 0x95B, 0x49B, 0x41497, 0xA4B, 0xA164B, 
0x6A5, 0x6D4, 0x615B4, 0xAB6, 0x957, 0x5092F, 0x497, 0x64B, 0x30D4A, 0xEA5, 0x80D65, 0x5AC, 
0xAB6, 0x5126D, 0x92E, 0xC96, 0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B, 0x25D, 0x92D, 
0x5192B, 0xA95, 0xB4A, 0x416AA, 0xAD5, 0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 
0x40E95);
    $scope.Year = null;
    $scope.Month = null;
    $scope.Day = null;
    $scope.TheDate = null;
    $scope.GetBit=function(m, n){  
        return (m >> n) & 1;  
    };  
    function e2c(year,month,day){  
        $scope.TheDate = new Date(year, month, day);
        var total, m, n, k;  
        var isEnd = false;  
        var tmp = $scope.TheDate.getFullYear();
        total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + $scope.madd[$scope.TheDate.getMonth()] + $scope.TheDate.getDate() - 38;
        if ($scope.TheDate.getYear() % 4 == 0 && $scope.TheDate.getMonth() > 1) {
            total++;  
        }  
        for (m = 0; ; m++) {  
            k = ($scope.CalendarData[m] < 0xfff) ? 11 : 12;
            for (n = k; n >= 0; n--) {  
                if (total <= 29 + $scope.GetBit($scope.CalendarData[m], n)) {
                    isEnd = true;  
                    break;  
                }  
                total = total - 29 - $scope.GetBit($scope.CalendarData[m], n);
            }  
            if (isEnd)  
                break;  
        }  
        $scope.Year = 1921 + m;
        $scope.Month = k - n + 1;
        $scope.Day = total;
        if (k == 12) {  
            if ($scope.Month == Math.floor($scope.CalendarData[m] / 0x10000) + 1) {
                $scope.Month = 1 - $scope.Month;
            }  
            if ($scope.Month > Math.floor($scope.CalendarData[m] / 0x10000) + 1) {  
                $scope.Month--;  
            }  
        }  
    };  
    function GetcDateString() {
        var tmp = "";
        tmp += $scope.HsString.charAt(($scope.Year - 4) % 10);
        tmp += $scope.EbString.charAt(($scope.Year - 4) % 12);
        tmp += "年";
        if ($scope.Month < 1) {
            tmp += "闰";
            tmp += $scope.MonString.charAt(-$scope.Month - 1);
        } else {
            tmp += $scope.MonString.charAt($scope.Month - 1);
        }
        tmp += "月";
        tmp += ($scope.Day < 11) ? "初" : (($scope.Day < 20) ? "十" : (($scope.Day < 30) ? "廿" : "三十"));
        if ($scope.Day % 10 != 0 || $scope.Day == 10) {
            tmp += $scope.NumString.charAt(($scope.Day - 1) % 10);
        }
        return tmp;
    };
    $scope.GetLunarDay = function (date) {
        if (date != null) {
            var dateString = date.split('T');
            var dateArray = dateString[0].split('-');
            var solarYear = dateArray[0];
            var solarMonth = dateArray[1];
            var solarDay = dateArray[2];
        } else {
            return;
        }
        
        if (solarYear < 1921 || solarYear > 2020) {  
            return "";  
        } else {  
            solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1): 11;  
            e2c(solarYear, solarMonth, solarDay);
            console.log(GetcDateString());
            return GetcDateString();  
        }
        
}  

使用的时候,只要调用最后一个方法GetLunarDay(date),传入date类型的参数,也就是阳历,返回值就是一个农历日期。


第二组:冯佳丽 c# .net 中<% = %>,<% # %>,<% $ %>意义

在asp.net中经常出现包含这种形式<%%>的html代码,总的来说包含下面这样几种格式:

1. <%%>

这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscript或者javascript代码,而在asp.net中是.net平台下支持的语言。

特别注意:服务器控件中不能有<%%>语法

(这里用C#代码)

  <%
        int a = 2;
        int b = 3;
        int c = a + b;
        Response.Write(c);
%>
2. <%#%>

如果是这种格式的话那就是asp.net下特有的,它是控件数据绑定的语法,且必须要调用该控件的DataBind()方法才执行(或者整个页面Page.DataBind()也就是对所得控件都调用DataBind()方法,在这种情况下不管是服务器控件还是客户端控件都会绑定)

特别注意:只有服务器控件才能用<%#%>语法(不准确的)

当整个页面调用this.DataBinder()方法时,不管是服务器控件还是客户端控件都会绑定

Server Control:
Client Control:

aspx.cs代码如下:

protected string text;//注意这里必须申明为public或protected,否则aspx页面(子类)无法访问
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.text = "aaaaaaaaaaaaa";
                this.TextBox1.DataBind();//或this.DataBind();              
            }
        }

当this.TextBox1.DataBind() 运行显示出来的效果(无法插入图片自己测试)

this.DataBind() 运行显示出来的效果(无法插入图片自己测试)

3. <%=%>

这种形式实际上是由<%%>扩展而来的.等价于:Response.Write(<%%>)这种形式(不标准,但能看明白),它其实也可以看成是一种绑定.

aspx代码:


aspx.cs代码:

public string  DisplayStr()//注意这里必须要有返回值,否则将会发生运行时错误
        {
            return "bbbb";
        }
4.<%$%>

这种形式主要用于对web.config文件的键值对进行绑定:通常用于连接数据库的字符串

特别注意:

  1. 绑定的只能是服务器控件
  2. 只能绑定到服务器控件的某个属性上。
 

web.config文件如下:

 
    
  

这样就能正常运行。

如果修改aspx中的文件:使用客户端的控件


或者:不绑定到服务器控件的某个属性上

<%$ConnectionStrings:pubs%>

运行都会出现相同的错误

最后注意一点: <%#%>只针对的是服务器控件的数据绑定,因此不能同<%=%>和<%%>混合使用

补充:针对:<%=%>形式的另外一种情况:

aspx代码:

 />
 />

aspx.cs代码:

 public string  DisplayStr()//注意这里必须要有返回值,否则将会发生运行时错误
        {
            return "bbbb";
        }

如果是这样的情况的话,就出现运行时错误。最后对这种<%=%>用法强调一句:尽量对客户端控件用这种形式,毕竟它是asp常用语法,不会出现问题。

但是对于asp.net的服务器控件就可能不能完全适合的。


第三组:黄华英 Vue.js 模板语法

Vue.js 是一套构建用户界面的渐进式框架,是一个小巧轻便的javascript库,采用自底向上增量开发的设计。它的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

1. 数据绑定

通过具有特殊前缀的HTML 属性来实现数据绑定:


使用常见的花括号模板插值:

{{msg}}

在表单元素上使用双向绑定:


v-bind 指令被用来响应地更新 HTML 属性:

 //将href与URL绑定,动态改变HTML 属性

缩写:



缩写:


2. v-model 双向数据绑定

在 input 输入框中我们可以使用 v-model 指令来实现双向数据绑定:

{{ message }}

3. v-on进行事件绑定

按钮的事件我们可以使用 v-on 监听事件,并对用户的输入进行响应。

  

给button 绑定一个方法名为reverseMessage的click点击事件

可以简写为


还可以绑定其他事件如v-on:mouseover,v-on:keydown, v-on:submit, v-on:keypress,v-on:keyup.13等

4. 过滤器:
{{ message | capitalize }}

过滤器可以串联:

 {{ message | filterA | filterB }}

可以接受参数

{{ message | filterA('arg1', arg2) }}

message 是第一个参数,字符串 'arg1' 将传给过滤器作为第二个参数, arg2 表达式的值将被求值然后传给过滤器作为第三个参数。

5. new Vue()创建一个Vue实例

Vue实例中设置挂载点的参数是 “ el ”,el 的值可以用dom元素定义

Vue构造器

 var Vue = new Vue({
el:’#app’,// 挂载点,划分Vue实例的边界
data: {},私有数据
Computed:{},// 计算属性
Methods:{}, //方法
Template:’’,  // 模板
  props: {}, // 接受参数
//生命周期钩子函数:
Created:function(){},
Attached: function(){},
destroyed function(){}
})

第四组:王芳 bootstrap中的glyphicons字形图标

  1. 先去下载bootstrap3.3.7版本,再新的版本里不包含fonts文件夹了
  2. 解压之后把fonts文件夹放到自己的项目中
  3. 在线绘制图标:http://www.runoob.com/try/demo_source/bootstrap-glyph-customization.htm
  4. 选择size和color等自己想要的属性,然后点击一下想要的图标,会生成一行html代码,图标就绘制成功啦
  5. 直接把这行代码写进自己的页面就可以

第五组:姜葳 C#中float、double精度问题

(1)期望结果:c = 1

namespace FloatTest
{
    class Program
    {
        static void Main(string[] args)
        {
            double a = 0.0001;
            float b = 0.1F;
 
            int c = (int)((a * 1000) / b);
 
            Console.WriteLine("c = {0}", c);
 
            Console.ReadLine();
        }
    }
}

返回结果:c = 0

(2)验证:

namespace FloatTest
{
    class Program
    {
        static void Main(string[] args)
        {
            double a = 0.0001;
            float b = 0.1F;
 
            int c = (int)((a * 1000) / b);
 
            Console.WriteLine("a = {0}", a);
            Console.WriteLine("b = {0}", Convert.ToDouble(b));
            Console.WriteLine("c = {0}", c); 
            Console.ReadLine();
        }
    }
}

返回结果:

a = 0.0001
b = 0.100000001490116
c = 0

可以看出:float在转成double的时候出现了精度的丢失问题

(3)如果在类型转换的时候导致精度丢失,那么可在定义的时候就为double

namespace FloatTest
{
    class Program
    {
        static void Main(string[] args)
        {
            double a = 0.0001;
            double b = 0.1;
 
            int c = (int)((a * 1000) / b);
 
            Console.WriteLine("a = {0}", a);
            Console.WriteLine("b = {0}", Convert.ToDouble(b));
            Console.WriteLine("c = {0}", c);
 
            Console.ReadLine();
        }
    }
}

返回结果:

a = 0.0001
b = 0.1
c = 1

因此,在程序中,我们应该尽量的避免浮点数类型转换导致的精度丢失。

附:为何浮点数可能丢失精度:
https://msdn.microsoft.com/zh-cn/c151dt3s.aspx
https://www.cnblogs.com/yewsky/articles/1864934.html

你可能感兴趣的:(2017-12-25 阳历转阴历、c# .net 中<% = %>,<% # %>等、Vue.js 模板语法、bootstrap、C#中float、double)