您的位置:首页 > 编程语言 > C#

数字转换成字符(C#)

2009-02-17 11:13 260 查看
昨天数字转换字符的问题捆饶了我一天,可能大家听了会笑话我,这么简单的问题一天都没有搞定,不过没关系昨天用了一个下午又加上晚上的一些时间算是能解决部分的问题了。

问题情况说明:从数据库读取一个float类型的数据,然后通过实体字段的绑定显示在界面上(要求不能有科学记数法)。

问题解决:首先要先了解各个类型的范围。

decimal 理论上为±1.0 × 10-28 到 ±7.9 × 1028 但是实际可以为 1.0X1029 - 1 有效数字最大只能有29位,否则类型转换时会出现错误。

double 它的范围是我接触的所有类型中最大的 ±5.0 × 10-324 到 ±1.7 × 10308 并且精度也是最高的 15 到 16 位 。但是它转换成字符串时一般显示15位有效数字,经过处理最大也只能有17位有效数字。

float 它的范围为 ±1.5 × 10-45 到 ±3.4 × 1038 界于double和decimal之间 精度为

7 位 。

int 它的范围为 -2,147,483,648 到 2,147,483,647 这个是一般比较常用的。

decimal 转换成字符串很简单 直接用 Tostring()方法即可,但需要注意的是,它的有效数字为29位,若整数位已经有28位了,还要小数位精确到两位这个是做不到的。在有效的数字范围可以使用

Math.Round(_dDecimal, 2) 保留精确的小数位。

double转换成字符串,目前还没有比较好的办法,暂时的解决办法为:
首先检测double的数据是否在decimal的范围,若在则先转换成Decimal然后在转成字符(这样做的弊端是显示出来的有效数字为15位,后面的就会四舍五入,但是显示出来的是十进制的数字而不是科学记数)。若大于decimal的范围则用Double的Tostring方法,但是这样显示的会是科学记数法的数字,下面是微软官方的说法:

默认情况下,返回值只包含 15 位精度,但内部维护的最大精度是 17 位。如果此实例的值超过 15 位,则 ToString 返回 PositiveInfinitySymbolNegativeInfinitySymbol,而不是预期的数字。如果要求更高的精度,请用“G17”或“R”格式规范指定 format;前一种格式总是返回 17 位精度;而后一种格式在数字可以用 15 位精度表示时返回 15 位精度,在数字只能用最大精度表示时返回 17 位精度

double _dDouble = Convert.ToDouble("12345678932165445.6598723");
string _sString = string.Empty;
decimal _dDecimal = Convert.ToDecimal("79000000000000000000000000000");
if (_dDouble > Convert.ToDouble(_dDecimal))
{
_sString = _dDouble.ToString("R1");
string _strLength = _sString.Substring(_sString.IndexOf('.') + 1);
if (_strLength .Length >= 3)
{
_sString = _sString.Substring(0, _sString.IndexOf('.') + 3);
}
}
else
{
_dDecimal = Convert.ToDecimal("12345678932165445.6598723");
_sString = Convert.ToDecimal(Math.Round(_dDecimal, 2)).ToString();
}
return _sString;

float的转换方法和double的基本相似,也可转成Double然后在处理。

int的转换就不用多说了,没有超过15个有效数字,则直接转换即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: