• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

SQL Server和C#中无法将小数字符串直接转换为整数类型

有时候我们会将一个小数字符串转换为整数,例如将"31.0"转换为整数类型,因为这个小数本来就是一个整数,它的小数位为0。

 

SQL Server

如果我们在SQL Server中直接将字符串'31.0'转换为INT类型,会报错:

DECLARE @text NVARCHAR(50)=N'31.0'
SELECT CAST(@text AS INT)

结果如下:

这时,我们要先把字符串'31.0'转换成一个SQL Server的小数类型(例如,DECIMAL或FLOAT等),再转换为INT类型就不会报错了:

DECLARE @text NVARCHAR(50)=N'31.0'

SELECT CAST(CAST(@text AS DECIMAL(18,1)) AS INT)
SELECT CAST(CAST(@text AS FLOAT) AS INT)

结果如下:

 

C#

同样,如果我们在C#中直接将字符串"31.0"转换为int类型,也会报错:

using System;

namespace NetCoreConversion
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "31.0";
            int integer = Convert.ToInt32(text);

            Console.WriteLine("Press any key to end...");
            Console.ReadKey();
        }
    }
}

结果如下:

同样,我们要先把字符串"31.0"转换成一个C#的小数类型(例如,float或decimal等),再转换为int类型就不会报错了:

using System;

namespace NetCoreConversion
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "31.0";
            float floatNumber = Convert.ToSingle(text);
            int integer1 = Convert.ToInt32(floatNumber);

            decimal decimalNumber = Convert.ToDecimal(text);
            int integer2 = Convert.ToInt32(decimalNumber);

            Console.WriteLine("Press any key to end...");
            Console.ReadKey();
        }
    }
}

 

由此,我们可以发现,很多转换字符串为整数的函数,不允许字符串中出现小数点,所以我们可以先把小数字符串转换为小数类型,再转换为整数类型。其实还有其它的办法,例如可以用各个语言的字符串处理函数,将字符串中小数点和其后面的字符全部截取掉,这样字符串中就只剩下整数位了,转换函数也就不会报错了,处理的方法很多,可以选择合适的方法。

 

posted @ 2020-02-08 21:45  PowerCoder  阅读(1493)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3