当产品发布给客户使用时,客户总会有这样要求“我们需要所有的数据,都要三位用逗号隔开”。这样的要求一点也不过分,因为当数字达到10万以上时,真心不能一眼看出这个数据是多少。
所以我们需要一个友好的数字显示方式,我们需要做
一,需要将普通的数字转换为三位表示
   1>我们需要在所有的列表中的数据;
   2>文本框中的数据都要用三位表示;
   3>在前台,输入文本框的值时,自动转换为三位一节的显示方式;
二, 需要将三位显示的数据转换为普通的无逗号的数据(因为,如我们需要根据现有的文本框数值去计算)。
   1>在后台将三位显示的数字转换为无逗号的数字;
   2>在前台将三位显示的数字转换为无逗号的数字;

一,需要将普通的数字转换为三位表示
   1>我们需要在所有的列表中的数据;
     GridView:在需要的列上加上DataFormatString="{0:N}"
     Repeater:<%# string.Format("{0:N}",Eval("expense_amount")) %>
   2>文本框中的数据都要用三位表示;
     下面的方法需要放在一个类型转换的公共类中(在项目中最好有一个类型转换类,因为从数据库检索出来的数据,你无法确定它是否有     值)。其实只将double转换为三位一节表示只需要一句表示: string.Format("{0:N}", doubleValue),但是很多情况都是从数据库,所以加了很多的判断;
        /// <summary>
        /// 将数字型的字符串,转换为格式化字符串
        /// </summary>
        /// <param name="strValue">要转换的字符串</param>
        /// <returns>格式化后的字符串</returns>
        public static string DoubleStrToFormat(string strValue)
        {
            return string.Format("{0:N}", StrToDouble(strValue));
        }

/// <summary>
        /// string型转换为double型
        /// </summary>
        /// <param name="strValue">要转换的字符串</param>
        /// <returns>转换后的int类型结果</returns>
        public static double StrToDouble(string strValue)
        {
            if ((strValue == null))
                return 0;

return StrToDouble(strValue.ToString(), 0);
        }

/// <summary>
        /// string型转换为double型
        /// </summary>
        /// <param name="strValue">要转换的字符串</param>
        /// <param name="defValue">缺省值</param>
        /// <returns>转换后的int类型结果</returns>
        public static double StrToDouble(string strValue, double defValue)
        {
            if (strValue == null)
                return defValue;

double intValue = defValue;
            if (strValue != null)
            {
                bool IsFloat = Regex.IsMatch(strValue, @"^([-]|[0-9])[0-9]*(\.\w*)?$");
                if (IsFloat)
                    double.TryParse(strValue, out intValue);
            }
            return intValue;
        }
    3>在前台,输入文本框的值时,自动转换为三位一节的显示方式,以下JS可以放在一个公共的文件中;
    //当文本框值变化时,格式化数字
    $("input.formatNum").live("keyup", function() {
        var objThis = $(this);
        var orginLength = objThis.val().length; //原来的字符长度
        var carePos = getCursortPosition(objThis[0]);
        var ret = formatNumber($.trim(objThis.val()), 2);
        objThis.val(ret);
        var newLength = objThis.val().length; //新的字符长度
        if (orginLength - newLength > 0) {//在删除数据时,如果格式化后少一个逗号,将光标减1
            carePos--;
        }
        if (newLength - orginLength > 0) {//在输入数据时,如果格式化后加入新的逗号,将光标加1
            carePos++;
        }
        setCaretPosition(objThis[0], carePos);
    });

//将数字转换为三位表示(此方法来源于pcajax博客园http://www.cnblogs.com/pcajax/archive/2011/03/07/1973369.html)
function formatNumber(s, n) {
    if (s == "" || s == undefined || s == null) {
        return "";
    }
    n = n > 0 && n <= 20 ? n : 2;
    s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
    var l = s.split(".")[0].split("").reverse(),
    r = s.split(".")[1];
    t = "";
    for (i = 0; i < l.length; i++) {
        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
    }
    return t.split("").reverse().join("") + "." + r;
}
//获取光标位置函数(此方法来源于网上,找不到原作者,抱歉了)
function getCursortPosition(ctrl) {
    var CaretPos = 0; // IE Support
    if (document.selection) {
        ctrl.focus();
        var Sel = document.selection.createRange();
        Sel.moveStart('character', -ctrl.value.length);
        CaretPos = Sel.text.length;
    }
    // Firefox support
    else if (ctrl.selectionStart || ctrl.selectionStart == '0')
        CaretPos = ctrl.selectionStart;
    return (CaretPos);
}
//设置光标位置函数(此方法来源于网上,找不到原作者,抱歉了)
function setCaretPosition(ctrl, pos) {
    if (ctrl.setSelectionRange) {
        ctrl.focus();
        ctrl.setSelectionRange(pos, pos);
    }
    else if (ctrl.createTextRange) {
        var range = ctrl.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
}
二, 需要将三位显示的数据转换为普通的无逗号的数据(因为,如我们需要根据现有的文本框数值去计算)。
   1>在后台将三位显示的数字转换为无逗号的数字;
        /// <summary>
        /// 去掉字符串中的逗号,并转换为double类型
        /// </summary>
        /// <param name="strValue">要转换的字符串</param>
        /// <returns></returns>
        public static double FormatStrToDouble(string strValue)
        {
            if ((strValue == null))
                return 0;
            return StrToDouble(strValue.Replace(",",""), 0);
        }
        调用的其它方法,参考(一,1>)中的代码
   2>在前台将三位显示的数字转换为无逗号的数字;
     将下面的js放在公共的js文件中
     String.prototype.ReplaceComma = function() {
        return this.replace(",", "")*1;
     }
     eg:var ret="123,222.21".ReplaceComma();

最后,本来想做个demo,但VS挂了,重装中,过段时间再把demo附上了。

转载于:https://www.cnblogs.com/dataadapter/archive/2012/06/22/2558365.html

数字 三位一节(逗号隔开)表示相关推荐

  1. php 数字加逗号,php数字满三位添加一逗号

    //数字满三位添加一逗号: $s_money1 = 1000000; $s_money2 = number_format($s_money1); echo $s_money1; //1000000 e ...

  2. 数字从后往前每三位加个逗号

    数字从后往前每三位加个逗号 // 数字从后往前每三位加个逗号(不足补零)NumberFilter(num) {let n = (Array(8).join(0) + num).slice(-8)let ...

  3. 某一个输入的位数不确定的正整数按照标准的三位分节格式输出

    题目描述: 编写程序,将某一个输入的位数不确定的正整数按照标准的三位分节格式输出,例如,当用户输入82668634时,程序应该输出82,668,634. 编程,一个良好的思维极其重要. 首先分析输入: ...

  4. 使用正则表达式实现将浮点数点左边的数每三位添加一个逗号

    题目: 如何将一个浮点数点左边的数每三位添加一个逗号.(使用正则表达式的方式实现). function toMoney(num) {return num && num.toString ...

  5. 数值格式化,每隔三位加一个逗号

    数值整数和小数 每隔三位加一个逗号方便阅读 function addCommas(nStr){ nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x[1 ...

  6. java中逗号怎么加_Java中如何将字符串从右至左每三位加一逗号

    /** * * 将字符串从右至左每三位加一逗号 * * * @param str 需要加逗号的字符串 * @return 以从右至左每隔3位加一逗号显示 */ public static String ...

  7. 「javaScript-每三位插入一个逗号实现方式」

    一道火了很久的面试题, //将以下数字从小数点前开始每三位数加一个逗号var num = 1234567890.12345;复制代码 相信大家写了这么久的前端代码,不论是培训也好,面试也好,这种题出现 ...

  8. C# int转string 每三位加一个逗号

    long aaaa = 14200666;Console.WriteLine(aaaa.ToString("N0"));Console.WriteLine(string.Forma ...

  9. Java金额每隔三位加上一个逗号

    JAVA实现给数字加逗号: 说明:将float类型的数据转换成以3位逗号隔开的字符串,并且保留两位有效数字 public static String formatTosepara(float data ...

  10. JavaScript jq 三位分节法 input输入数字时每3位使用逗号隔开

    可只用于整数与小数. 效果演示: html 部分: <body><input type="text" id="lname"/> < ...

最新文章

  1. 非对称加密和证书总结
  2. 看京东系统架构师如何让笨重的架构变得灵巧
  3. Oralce Plsql 中文显示乱码问题无需修改注册表完美解决
  4. 第二十一讲 卷积公式
  5. 酷桌面:随身携带你的企业
  6. 物理学家史蒂夫·霍金逝世,享年76岁(附图文回顾他的一生)
  7. 屏幕阅读器安全吗_如何为屏幕阅读器设计网站布局
  8. 注意,Dubbo 存在高危反序列化漏洞!
  9. 静态路由和默认路由的配置实战及其区别--很详细哦
  10. 51aspx技术文章汇总搜集
  11. 逻辑SQL Server数据复制101
  12. linux下的文档处理及tar命令
  13. Gridview表格控件
  14. java加入md5_javamd5加密解密
  15. java8进制转换_Java进制转换方法大全_十进制,八进制,二进制,十六进制转换...
  16. SQL Server 数据库之连接查询
  17. CentOS护眼颜色
  18. 全球化业务渐入佳境,BIGO盈利持续大幅提升,是时候重估欢聚集团
  19. 新版标准日本语中级_第十八课
  20. 太强了!美团智能客服核心技术与实践,这差距不止一点点!

热门文章

  1. UltraNumTextBox【实现所有数字输入的同时,可以控制当控件禁用时ForeColor】
  2. Redis(RedisTemplate)使用string字符串
  3. java三大特性(封装、继承、多态)
  4. 【ant项目构建学习点滴】--(3)打包及运行jar文件
  5. var that = this 小坑记
  6. spring.xml
  7. NOIP2010 引水入城
  8. 漂亮的抽奖C#源代码
  9. 一个canvas的demo
  10. 网页制作的基本知识(标签)