惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
U
Unit 42
V
Visual Studio Blog
D
DataBreaches.Net
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
D
Docker
G
Google Developers Blog
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
S
SegmentFault 最新的问题

博客园 - Insus.NET

Vue3实现拖放式上传 拖放式上传 实现MultipartStreamProvider经Web API上传文档或图片 文件上传和表单字段混合提交 在HttpContext.Current返回null时如何操作 angularjs根据类型动态加载组件 angularjs获取数据服务 扫一扫直连WiFi二维码 User Profile Service 服务未能登录 Visual Studio2026创建Vue项目 安装与配置node.js HTTP Error 403.14 - Forbidden VisualStudio2026回滚上一版本 消息认证码(加强) 网站无法使用插值字符串语法 HMAC(Hash-based Message Authentication Code)认证示例 浏览器自动发送域凭据 企业内小网站兼用Windows验证登录 访问用户控件的函数 onblur事件改为监听处理 将警报消息改为吐司消息 内容有无变化OnBlur即时更新引起的问题与解决 混合式提高用户编辑与操作效率 光标离开文框后即刻更新 WebForm实现Web API JavaScript对GridView删除行后并重新给其数据绑定 把CS值传给JS使用 v2 确认信息confirm由C#后端移至javascript前端 无法发布网站Web Site 点击单元格弹出窗口处理数据返回父页
JavaScript判断字符是否为decimal
Insus.NET · 2026-04-09 · via 博客园 - Insus.NET

在C#语言环境下,可以使用

string xxx = "123.45";
decimal dec;
if (decimal.TryParse(xxx, out dec)) //返回 true or false
{
    // true, do some thing.
}
else
{
    //false, do some thing.
}

但是,如果在javascript语境中呢?你是可以参考下面函数来实现:
2026-04-09_15-53-24

function isDecimal(str) {
    // 去除首尾空格
    str = str.trim();
    // 空字符串不算有效数字
    if (str === "") return false;
    // 使用 parseFloat 尝试转换
    let num = parseFloat(str);
    // 检查转换结果是否为有效数字,并且要求字符串必须**完全**表示该数字(避免 "123abc" 之类)
    return !isNaN(num) && /^-?\d+(?:\.\d+)?$/.test(str);
}

View Code

实例:

var sjz= document.getElementById('<%= HiddenFieldShiJiZhi.ClientID %>').value;
var metric = isDecimal(sjz) ? parseFloat(sjz).toFixed(8).replace(/\.?0+$/, '') : sjz;

以上实现,判断字符串是否为decimal?
如果是,把小数点后最后一数字后的0去除。
如果非decimal,返回原字符串。

其实,在数据库,如MS SQL Server还会需要判断的。
在新版本如2012+可以使用,TRY_CAST和TRY_CONVERT

如果您的SQL Server版本较低,得想想一个替代方案?或者
升级数据库兼容级别(ALTER DATABASE ... SET COMPATIBILITY_LEVEL = 160)来完整支持新函数。

以下内容于2026/4/10 10:37补充
2026-04-10_10-38-59

-- =============================================
-- Author:        leo yeung  
-- Create date: 2026-04-10
-- Description:    判断字符串是否为decimal
-- =============================================
CREATE FUNCTION [dbo].[svf_IsDecimal] 
(
    @Str NVARCHAR(100)
) RETURNS BIT
AS
BEGIN
    DECLARE @Result BIT = 0
    SET @Str = LTRIM(RTRIM(@Str))  -- 去除首尾空格

    -- 空字符串直接返回 0
    IF LEN(@Str) = 0
        RETURN 0

    -- 使用 CASE 进行逐层校验(比 AND 链更清晰)
    IF (
        -- 1. 基本格式正则(不允许前导/后导空格、只允许数字、可选负号、可选小数点、小数部分必须有数字)
        @Str LIKE '[+-]%'       -- 可选正负号开头
        OR @Str LIKE '[0-9]%'   -- 或者数字开头
    )
    AND @Str NOT LIKE '%[^-+0-9.]%'   -- 只允许数字、负号、正号、小数点
    AND @Str NOT LIKE '%[+-]%[+-]%'   -- 只允许一个正/负号,且必须在开头
    AND CHARINDEX('.', @Str) <= 1     -- 小数点最多一个,且不能出现在正负号之前
    AND LEN(@Str) - LEN(REPLACE(@Str, '.', '')) <= 1  -- 确保小数点个数 <=1
    AND (
        CHARINDEX('.', @Str) = 0      -- 没有小数点时,全部是数字(可能有正负号)
        OR (
            CHARINDEX('.', @Str) > 0
            AND LEN(SUBSTRING(@Str, CHARINDEX('.', @Str) + 1, LEN(@Str))) >= 1  -- 小数部分至少一位
            AND CHARINDEX('.', @Str) > CASE WHEN @Str LIKE '[+-]%' THEN 2 ELSE 1 END  -- 整数部分至少一位
        )
    )
    AND @Str NOT LIKE '%[^0-9]%'      -- 去除正负号和小数点后,剩下全是数字
    BEGIN
        SET @Result = 1
    END

    -- 可选:进一步排除科学计数法(如果担心 '1E2' 等,但上面的正则已经排除 E)
    IF CHARINDEX('E', UPPER(@Str)) > 0
        SET @Result = 0

    RETURN @Result
END

View Code


另外一个版本,可供参考,
2026-04-10_10-49-11

 
-- =============================================
-- Author:        leo yeung  
-- Create date: 2026-04-10
-- Description:    判断字符串是否为decimal
-- =============================================
 CREATE FUNCTION [dbo].[svf_IsDecimal]
(
    @number NVARCHAR(100)
)
RETURNS BIT
AS
BEGIN
    SET @number = LTRIM(RTRIM(@number))
    IF @number = '' OR @number IS NULL
        RETURN 0

    -- 排除科学计数法(含 E 或 e)
    IF UPPER(@number) LIKE '%E%'
        RETURN 0

    -- 利用 ISNUMERIC + 'e0' 技巧快速过滤大多数非法格式
    IF ISNUMERIC(REPLACE(REPLACE(@number, '+', 'A'), '-', 'A') + 'e0') = 0
        RETURN 0

    -- 额外排除仅包含正负号或小数点的情况
    IF @number IN ('.', '+', '-', '+.', '-.')
        RETURN 0

    -- 排除多个小数点、小数点位置不正确等(可选,上述 e0 已经能拦截大多数)
    IF LEN(@number) - LEN(REPLACE(@number, '.', '')) > 1
        RETURN 0
    RETURN 1
END
GO

View Code