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()方法时,不管是服务器控件还是客户端控件都会绑定

<div>
Server Control:<asp:TextBox ID="TextBox1" runat="server" Text="<%#text%>"></asp:TextBox><br /><!--Server Control-->
Client Control:<input type="text" id="textbox2" value="<%#text%>" /><!--Client Control-->
 </div>

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代码:

<label id="label1"><%=DisplayStr()%></label><br />
  <label id="label2" runat="server"><%=DisplayStr()%></label>

aspx.cs代码:

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

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

特别注意:

  1. 绑定的只能是服务器控件
  2. 只能绑定到服务器控件的某个属性上。
 <asp:TextBox runat="server" ID="cc" Text="<%$ConnectionStrings:pubs%>"></asp:TextBox>

web.config文件如下:

 <connectionStrings>
    <add name="pubs" connectionString="Server=.;database=pubs;uid=sa;pwd=" providerName="System.Data.SqlClient"/>
  </connectionStrings>

这样就能正常运行。

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

<input type="text" value="<%$ConnectionStrings:pubs%>"/>

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

<asp:TextBox runat="server" ID="cc"><%$ConnectionStrings:pubs%></asp:TextBox>

运行都会出现相同的错误

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

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

aspx代码:

<input type="text" id="a"  value=<%=DisplayStr()%> />
<input id="Text1" type="text"  runat="server" value=<%=DisplayStr()%> />

aspx.cs代码:

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

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

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


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

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

1. 数据绑定

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

<span v-text="msg"></span>
<div v-html="message"></div>

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

<span>{{msg}}</span>

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

<input v-model="msg">

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

<a v-bind:href="url"></a> //将href与URL绑定,动态改变HTML 属性

缩写:

<a :href="url"></a>
<button v-bind:disabled="someDynamicCondition">Button</button>

缩写:

<button :disabled="someDynamicCondition">Button</button>
2. v-model 双向数据绑定

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

<div id="app"> <p>{{ message }}</p> <input v-model="message"> </div> 
<!-- P标签值与input的输入值绑定,P的值会随着input的输入值变化 -->
3. v-on进行事件绑定

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

  <button v-on:click="reverseMessage">点击</button>

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

可以简写为

<button @click=" reverseMessage ">点击</button>

还可以绑定其他事件如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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342