C#保留2位小数几种场景总结
场景1:
C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.25.可不可以刚好保留到最后一位不是0的位置?
默认保留2位,如果真的有3位小数,就保留3位,有4位就保留4位。
先说一下ToString("0.00##")中0和#的区别:
0 代表占位的。如果ToString("0.00") 这样就是保留两位小数,无论小数有多少位或者无小数,结果都是两位小数。例如 1.1234 那么结果是1.12。如果是1.2 那么结果会补零,为1.20。
# 代表后面的不是零就被保留,如果是0就去掉。例如ToString("0.##") 那么1.20的话结果是1.2。
对于场景1的问题,默认有两位就是00,其它的如果大于两位就不是零就保留的话,可以下面这样写:
double dd = 1.2530; string ret = dd.ToString("0.00####"); // 1.253
场景2:
根据国际惯例,有时候我们需要对超出的位数“四舍五入”。用C# 实现保留两位小数的方法有很多,常用的总结如下:
1、Math.Round(0.333333,2);//按照四舍五入的国际标准
2、double dbdata=0.335333; string str1=String.Format("{0:F}",dbdata);//默认为保留两位
3、float i=0.333333; int j=(int)(i * 100); i = j/100;
4、decimal.Round(decimal.Parse("0.3333333"),2)
5、private System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
float test=0.333333f;
nfi.NumberDecimalDigits=2;
string result=test.ToString("N", nfi);
6、string result= String.Format("{0:N2}",Convert.ToDecimal("0.333333").ToString());
7、Convert.ToDecimal("0.33333333").ToString("0.00");
游标遍历所有数据库循环执行修改数据库的sql命令
MSSQL数据库服务器上有很多类似的数据库,需要将这些数据库统一修改其中的某些表或者某些命令,那么就会想到用游标来遍历。
先来说思路:
1,首先需要查询出所有的数据库;
select [name] from [master].[dbo].[sysdatabases] order by [name]; --查询MSSQL中所有数据库名称
2,用游标CURSOR来集合查询出来的数据库名称集合,来实现循环遍历每一个数据库;
3,在循环遍历每一个数据库名称时,通过拼接sql语句来实现命令字符串,并且用EXEC执行命令;
注意:可以根据个人需要对数据库名称进行筛选。
代码示例如下:
DECLARE @sysname sysname; --数据库名称变量 DECLARE My_Cursor CURSOR --定义游标 FOR (select [name] from [master].[dbo].[sysdatabases]) --查出所有的数据库名称的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO @sysname; --读取下一行/第一行数据并存放在变量值中 WHILE @@FETCH_STATUS = 0 --是否可继续执行循环状态 BEGIN --PRINT @sysname; DECLARE @sql nvarchar(max); --sql命令字符串 SET @sql='USE ['+@sysname+'];'; --Begin if (CHARINDEX('_QtxApp', @sysname)>0) --我只需要修改名字包含_QtxApp的数据库 begin SET @sql+='select * from dbo.Access_token'; --自定义的sql命令 PRINT @sql; end else begin PRINT @sql; end --End EXEC(@sql); --执行字符串sql FETCH NEXT FROM My_Cursor INTO @sysname; --读取下一行数据并存放在变量值中 END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 GO
原生js轮盘抽奖实例分析(幸运大转盘抽奖)
效果图:
所需图片素材:
这张图是pointer.png的位置的。
turntable-bg.jpg这张是转盘背景图,在背景位置。
这张是turntable.png位置的。
需要这三张图片,如果要实现一下,直接另存这三图片引入进去即可。如果不会请修改成对应的图片名字,放到同一个文件下。
基本原理:
1,通过设置CSS样式的position属性,z-index属性等实现背景图,转盘图与指针图的层叠摆放;
2,通过设置元素style.transform = "rotate(0deg)"实现旋转效果。
完整代码如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="description" content=""> 6 <meta name="author" content="熊仔其人"> 7 <title>转盘抽奖效果</title> 8 <!-- 这里是css部分 --> 9 <style> 10 #bg { 11 width: 650px; 12 height: 600px; 13 margin: 0 auto; 14 background: url(turntable-bg.jpg) no-repeat; 15 position: relative; 16 } 17 18 img[src^="pointer"] { 19 position: absolute; 20 z-index: 10; 21 top: 155px; 22 left: 247px; 23 } 24 25 img[src^="turntable"] { 26 position: absolute; 27 z-index: 5; 28 top: 60px; 29 left: 116px; 30 transition: all 4s; 31 } 32 </style> 33 </head> 34 <body> 35 <!-- 这里是HTML结构部分 --> 36 <div id="bg"><img src="pointer.png" alt="pointer"><img src="turntable.png" alt="turntable"></div> 37 <!-- 这里是js部分 --> 38 <script> 39 var oPointer = document.getElementsByTagName("img")[0]; 40 var oTurntable = document.getElementsByTagName("img")[1]; 41 var cat = 51.4; //总共7个扇形区域,每个区域约51.4度 42 var num = 0; //转圈结束后停留的度数 43 var offOn = true; //是否正在抽奖 44 oPointer.onclick = function () { 45 if (offOn) { 46 oTurntable.style.transform = "rotate(0deg)"; 47 offOn = !offOn; 48 ratating(); 49 } 50 } 51 //旋转 52 function ratating() { 53 var timer = null; 54 var rdm = 0; //随机度数 55 clearInterval(timer); 56 timer = setInterval(function () { 57 if (Math.floor(rdm / 360) < 3) { rdm = Math.floor(Math.random() * 3600); } 58 else { 59 oTurntable.style.transform = "rotate(" + rdm + "deg)"; 60 clearInterval(timer); 61 setTimeout(function () { 62 offOn = !offOn; 63 num = rdm % 360; 64 if (num <= cat * 1) { alert("4999元"); console.log("rdm=" + rdm + ",num=" + num + "," + "4999元"); } 65 else if (num <= cat * 2) { alert("50元"); console.log("rdm=" + rdm + ",num=" + num + "," + "50元"); } 66 else if (num <= cat * 3) { alert("10元"); console.log("rdm=" + rdm + ",num=" + num + "," + "10元"); } 67 else if (num <= cat * 4) { alert("5元"); console.log("rdm=" + rdm + ",num=" + num + "," + "5元"); } 68 else if (num <= cat * 5) { alert("免息服务"); console.log("rdm=" + rdm + ",num=" + num + "," + "免息服务"); } 69 else if (num <= cat * 6) { alert("提交白金"); console.log("rdm=" + rdm + ",num=" + num + "," + "提交白金"); } 70 else if (num <= cat * 7) { alert("未中奖"); console.log("rdm=" + rdm + ",num=" + num + "," + "未中奖"); } 71 }, 4000); 72 } 73 }, 30); 74 } 75 </script> 76 </body> 77 </html>
css和HTML代码不多,主要是为了实现过渡设置,还有为了实现层叠而使用position定位,让元素脱离文档流,js代码在于获取元素和事件的点击,点击指针会旋转,所以要给指针加个点击事件,然后是判断旋转是否停止,如果没有就点击也不能调用函数ratating(),这个函数执行转盘的旋转和判断指针停在什么位置,然后弹出相应的内容,而函数里实现旋转的过程,是获取转盘的元素,然后使用js控制css的属性-transform:rotate(),我们不是使用过这个属性在css里直接使它实现旋转的效果吗?就是和伪类选择器:hover及过渡属性一起使用去实现的,那么因为css实现不了数字的运算和鼠标点击,所以让js去实现且控制css属性,实现到点击旋转这个功能,然而定时器的使用暂时不说,思路就是使用js实现数字的运算和鼠标的点击及css属性的控制达到旋转的效果。
Math.random()是随机数的生成,Math.floor()向下取整。
javascript中的typeof和类型判断
typeof
ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。我们都知道可以使用typeof运算符求得一个变量的类型,但是对引用类型变量却只会返回object
,也就是说typeof只能正确识别基本类型值变量。
var a = "abc"; console.log(typeof a); // "string" var b = 123; console.log(typeof b); // "number" var c = true; console.log(typeof c); // "boolean" var d = null; console.log(typeof d); // "object" var f = undefined; console.log(typeof f); // "undefined" var g; console.log(typeof g); // "undefined" console.log(typeof x); // "undefined"
您也许会问,为什么 typeof 运算符对于 null 值会返回 "object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
最后一个比较奇怪,typeof一个不存在的变量x
居然返回了"object"而不是"undefined"。
我们在来如下代码:
var a = function() { }; console.log(typeof a); // "function" var b = [1,2,3]; console.log(typeof b); // "object" var c = { }; console.log(typeof c); // "object"
对于数组和对象都返回"object",因此我们日常开发中一个常见需求就是如何判断变量是数组还是对象。
类型判断
类型判断,一般就是判断是否是数组,是否是空对象。这是针对这个需求,我日常用过或见过的判断方法
判断是否是数组
有数组:var a = [1,2,3,4,5];
方法一:
toString.call(a); // "[object Array]"
方法二:
a instanceof Array; //true
方法三:
a.constructor == Array; //true
第一种方法比较通用,也就是Object.prototype.toString.call(a)
的简写。
instanceof
和constructor
判断的变量,必须在当前页面声明的,比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个a,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor
会返回false
;
var a = [1,2,3,4,5]; console.log(toString.call(a)); // "[object Array]" console.log(a instanceof Array); //true console.log(a.constructor == Array); //true
判断是否是空对象
有变量:var obj = {};
方法一:
JSON.stringify(obj); // "{}"
通过转换成JSON对象来判断是否是空大括号
方法二:
if(obj.id){ //如果属性id存在....}
这个方法比较土,大多数人都能想到,前提是得知道对象中有某个属性。
方法三:
function isEmptyObject(e) { var t; for (t in e) return !1; return !0 } //trueisEmptyObject(obj); //falseisEmptyObject({ "a":1, "b":2});
这个方法是jQuery的isEmptyObject()方法的实现方式。