99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時代【CDA干貨】解決 pd.read\_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題
【CDA干貨】解決 pd.read\_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題
2025-09-12
收藏

解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題

為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時的科學(xué)計(jì)數(shù)法問題,我將從問題根源切入,先解析科學(xué)計(jì)數(shù)法的觸發(fā)機(jī)制,再系統(tǒng)拆解pd.read_csv參數(shù)配置、數(shù)據(jù)類型轉(zhuǎn)換、顯示格式設(shè)置等核心解決方案,結(jié)合實(shí)戰(zhàn)案例演示操作流程,同時提供不同場景下的最優(yōu)選擇建議,確保長浮點(diǎn)數(shù)據(jù)以原始格式精準(zhǔn)呈現(xiàn)。

一、問題根源:為什么長浮點(diǎn)數(shù)據(jù)會觸發(fā)科學(xué)計(jì)數(shù)法?

在解決問題前,需先理解 Pandas 對浮點(diǎn)數(shù)的處理邏輯 —— 科學(xué)計(jì)數(shù)法并非 “錯誤”,而是計(jì)算機(jī)存儲和顯示大 / 小數(shù)值的默認(rèn)優(yōu)化方式,但在業(yè)務(wù)場景中常不符合需求。其觸發(fā)原因主要有兩點(diǎn):

1. 浮點(diǎn)數(shù)的存儲特性與 Pandas 默認(rèn)設(shè)置

  • 數(shù)值范圍觸發(fā):當(dāng)浮點(diǎn)數(shù)絕對值小于1e-4(如0.00005)或大于1e11(如123456789012)時,Pandas 默認(rèn)啟用科學(xué)計(jì)數(shù)法,這是基于 NumPy(Pandas 的底層依賴)的浮點(diǎn)數(shù)顯示規(guī)則;

  • 數(shù)據(jù)類型限制:Pandas 讀取 CSV 時,默認(rèn)將數(shù)值列識別為float64類型(64 位浮點(diǎn)數(shù)),該類型雖能保留較高精度,但在顯示時會為 “極值” 或 “長小數(shù)” 自動切換為科學(xué)計(jì)數(shù)法,平衡顯示長度與可讀性。

2. 業(yè)務(wù)場景中的核心痛點(diǎn)

科學(xué)計(jì)數(shù)法的主要問題集中在 “可讀性” 與 “精度” 兩方面:

  • 可讀性差:財(cái)務(wù)數(shù)據(jù)中 “1234567.89” 顯示為 “1.234568e+06”,業(yè)務(wù)人員需手動轉(zhuǎn)換才能理解實(shí)際金額;

  • 精度風(fēng)險(xiǎn):若數(shù)據(jù)需后續(xù)導(dǎo)出為 Excel、CSV 供其他系統(tǒng)使用,科學(xué)計(jì)數(shù)法格式可能被誤讀(如部分系統(tǒng)無法識別e符號),或轉(zhuǎn)換過程中丟失小數(shù)位精度(如1.23456789e-05可能被截?cái)酁?code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background-color: rgba(27,31,35,.05); font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; word-break: break-all; color: rgb(271,93,108);">0.000012)。

二、核心解決方案:pd.read_csv參數(shù)配置 —— 從源頭避免科學(xué)計(jì)數(shù)法

解決問題的關(guān)鍵在于讀取數(shù)據(jù)時直接控制浮點(diǎn)數(shù)的存儲與顯示格式,而非讀取后再調(diào)整。pd.read_csv提供了多個參數(shù)可針對性配置,以下按 “優(yōu)先級” 從高到低講解。

1. 最直接方案:用dtype指定列數(shù)據(jù)類型(推薦)

若已知長浮點(diǎn)數(shù)據(jù)所在的列(如 “金額”“濃度” 列),可通過dtype參數(shù)在讀取時直接將其指定為字符串類型精度浮點(diǎn)數(shù)類型,從源頭避免科學(xué)計(jì)數(shù)法。

(1)指定為字符串類型:適合無需計(jì)算的場景

當(dāng)長浮點(diǎn)數(shù)據(jù)僅需 “展示” 或 “導(dǎo)出”,無需參與數(shù)值計(jì)算(如身份證號、銀行卡號雖為數(shù)字,但本質(zhì)是標(biāo)識,需完整顯示)時,將列指定為str類型,可完全保留原始格式:

代碼示例

import pandas as pd

# 讀取CSV,將"amount"(金額)和"id"(編號)列指定為字符串類型

df = pd.read_csv(

   "data.csv",

   dtype={

       "amount": str,  # 長浮點(diǎn)金額列:如"123456789.123456",讀取后仍為字符串

       "id": str       # 長數(shù)字編號:如"1000000000000123456",避免被識別為浮點(diǎn)數(shù)

   }

)

# 驗(yàn)證結(jié)果:查看數(shù)據(jù)類型與顯示格式

print("數(shù)據(jù)類型:")

print(df.dtypes)  # 輸出:amount    object(字符串類型),id    object

print("n原始格式數(shù)據(jù):")

print(df["amount"].head())  # 輸出:123456789.123456、98765432.654321 等原始格式

(2)指定為高精度浮點(diǎn)數(shù)類型:適合需計(jì)算的場景

若長浮點(diǎn)數(shù)據(jù)需參與數(shù)值計(jì)算(如求和、平均值),不能用字符串類型,可指定為numpy.float64(默認(rèn))的擴(kuò)展類型,或通過Decimal類型保留更高精度(需配合converters參數(shù)):

代碼示例(用numpy.float64并后續(xù)控制顯示)

import pandas as pd

import numpy as np

# 讀取CSV,將"concentration"(濃度)列指定為numpy.float64(默認(rèn)類型,但后續(xù)控制顯示)

df = pd.read_csv(

   "data.csv",

   dtype={"concentration": np.float64}  # 長小數(shù)濃度:如"0.000000123456789"

)

# 關(guān)鍵:設(shè)置浮點(diǎn)數(shù)顯示格式,禁用科學(xué)計(jì)數(shù)法

pd.options.display.float_format = '{:.10f}'.format  # 保留10位小數(shù),不使用科學(xué)計(jì)數(shù)法

# 驗(yàn)證結(jié)果:計(jì)算并顯示數(shù)據(jù)

print("濃度列數(shù)據(jù)(無科學(xué)計(jì)數(shù)法):")

print(df["concentration"].head())  # 輸出:0.0000001235(保留10位小數(shù),非科學(xué)計(jì)數(shù)法)

print("n濃度平均值(無科學(xué)計(jì)數(shù)法):")

print(df["concentration"].mean())  # 輸出:0.0000002345(計(jì)算后仍保持格式)

注意事項(xiàng):

  • 字符串類型的浮點(diǎn)數(shù)無法直接參與計(jì)算,需先通過pd.to_numeric(..., downcast='float')轉(zhuǎn)換為數(shù)值類型;

  • numpy.float64雖支持計(jì)算,但極端長小數(shù)(如 15 位以上)仍可能存在精度損失,需用decimal.Decimal類型(見下文進(jìn)階方案)。

2. 靈活方案:用converters自定義轉(zhuǎn)換函數(shù)(處理復(fù)雜格式)

若長浮點(diǎn)數(shù)據(jù)格式特殊(如包含千位分隔符1,234,567.89、帶單位1234.56 mg),dtype參數(shù)無法直接處理,可通過converters參數(shù)為指定列設(shè)置自定義轉(zhuǎn)換函數(shù),在讀取時同步處理格式并禁用科學(xué)計(jì)數(shù)法。

代碼示例(處理帶千位分隔符的長浮點(diǎn)數(shù)據(jù))

import pandas as pd

from decimal import Decimal  # 用于高精度轉(zhuǎn)換

# 自定義轉(zhuǎn)換函數(shù):去除千位分隔符,轉(zhuǎn)換為Decimal類型(無科學(xué)計(jì)數(shù)法,高精度

def convert_long_float(value):

   # 處理千位分隔符:如"1,234,567.890123" → "1234567.890123"

   cleaned_value = value.replace(',''')

   # 轉(zhuǎn)換為Decimal類型(保留原始精度,不觸發(fā)科學(xué)計(jì)數(shù)法)

   return Decimal(cleaned_value)

# 讀取CSV,為"revenue"(營收)列應(yīng)用自定義轉(zhuǎn)換函數(shù)

df = pd.read_csv(

   "data.csv",

   converters={"revenue": convert_long_float}  # 營收數(shù)據(jù):如"1,234,567,890.123456"

)

# 驗(yàn)證結(jié)果:查看數(shù)據(jù)類型與格式

print("營收列數(shù)據(jù)類型:", df["revenue"].dtype)  # 輸出:object(Decimal類型在Pandas中顯示為object)

print("n營收列原始格式:")

print(df["revenue"].head())  # 輸出:Decimal('1234567890.123456')(完整保留,無科學(xué)計(jì)數(shù)法)

# 支持高精度計(jì)算

total_revenue = df["revenue"].sum()

print("n總營收(高精度):", total_revenue)  # 輸出:Decimal('9876543210.123456')(無精度損失)

核心優(yōu)勢:

  • Decimal類型可保留任意位數(shù)的小數(shù)精度,完全避免浮點(diǎn)數(shù)存儲導(dǎo)致的科學(xué)計(jì)數(shù)法;

  • 自定義函數(shù)可靈活處理數(shù)據(jù)清洗(如去分隔符、去單位),一步完成 “讀取 + 格式處理”。

3. 全局方案:修改 Pandas 顯示選項(xiàng)(影響所有浮點(diǎn)數(shù))

若需對整個 DataFrame 的所有浮點(diǎn)數(shù)列禁用科學(xué)計(jì)數(shù)法,可通過修改 Pandas 的全局顯示選項(xiàng)pd.options.display.float_format,該方案無需在pd.read_csv中額外配置,適合全局統(tǒng)一格式的場景。

(1)基礎(chǔ)配置:固定小數(shù)位數(shù)

import pandas as pd

# 全局設(shè)置:所有浮點(diǎn)數(shù)保留8位小數(shù),不使用科學(xué)計(jì)數(shù)法

pd.options.display.float_format = '{:.8f}'.format

# 讀取CSV(無需額外參數(shù),全局配置生效)

df = pd.read_csv("data.csv")

# 驗(yàn)證:所有浮點(diǎn)數(shù)列均按設(shè)置顯示

print(df.head())

# 輸出示例:

#    amount      concentration

# 0 123456789.12345679  0.00000012

# 1 987654321.65432101  0.00000034

(2)進(jìn)階配置:自動適配有效位數(shù)(避免多余 0)

若不同列的小數(shù)位數(shù)差異大(如 “金額” 保留 2 位,“濃度” 保留 10 位),固定小數(shù)位數(shù)會導(dǎo)致多余 0 或截?cái)?,可通過lambda函數(shù)動態(tài)保留有效位數(shù):

import pandas as pd

# 全局設(shè)置:浮點(diǎn)數(shù)顯示10位有效數(shù)字,不使用科學(xué)計(jì)數(shù)法(自動適配小數(shù)位數(shù))

pd.options.display.float_format = lambda x: '{:.10g}'.format(x)

# 讀取CSV

df = pd.read_csv("data.csv")

# 驗(yàn)證:不同列自動適配

print(df[["amount""concentration"]].head())

# 輸出示例(無多余0,無科學(xué)計(jì)數(shù)法):

#    amount      concentration

# 0 123456789.1  0.000000123456

# 1 987654321.7  0.000000345678

注意事項(xiàng):

  • 全局配置僅影響 “顯示格式”,不改變數(shù)據(jù)的實(shí)際存儲類型(仍為float64);

  • 若后續(xù)需恢復(fù)默認(rèn)設(shè)置,執(zhí)行pd.reset_option('display.float_format')即可。

三、實(shí)戰(zhàn)案例:全流程處理長浮點(diǎn)數(shù)據(jù)(從讀取到導(dǎo)出)

以下結(jié)合 “財(cái)務(wù)數(shù)據(jù)處理” 場景,演示從 CSV 讀取、格式調(diào)整、計(jì)算分析到導(dǎo)出的完整流程,確保長浮點(diǎn)數(shù)據(jù)全程無科學(xué)計(jì)數(shù)法。

場景描述:

處理包含 “訂單金額(帶千位分隔符,如 1,234,567.89)”“折扣率(長小數(shù),如 0.0087654321)”“訂單編號(長數(shù)字,如 100000000000123456)” 的 CSV 文件,需完成:

  1. 讀取數(shù)據(jù)時保留原始格式,禁用科學(xué)計(jì)數(shù)法;

  2. 計(jì)算 “實(shí)際支付金額 = 訂單金額 ×(1 - 折扣率)”;

  3. 導(dǎo)出為新 CSV,確保金額列無科學(xué)計(jì)數(shù)法。

完整代碼:

import pandas as pd

from decimal import Decimal

# ---------------------- 1. 讀取數(shù)據(jù):處理格式并禁用科學(xué)計(jì)數(shù)法 ----------------------

# 自定義轉(zhuǎn)換函數(shù):處理千位分隔符,轉(zhuǎn)換為Decimal(高精度

def convert_amount(value):

   return Decimal(value.replace(','''))

# 自定義轉(zhuǎn)換函數(shù):處理折扣率(長小數(shù),轉(zhuǎn)換為Decimal)

def convert_discount(value):

    return Decimal(value)

# 讀取CSV,指定列轉(zhuǎn)換函數(shù)

df = pd.read_csv(

   "financial_data.csv",

   converters={

       "order_amount": convert_amount,    # 訂單金額列:帶千位分隔符

       "discount_rate": convert_discount, # 折扣率列:長小數(shù)

       "order_id": str                    # 訂單編號列:長數(shù)字→字符串,避免科學(xué)計(jì)數(shù)法

   }

)

# ---------------------- 2. 數(shù)據(jù)計(jì)算:高精度計(jì)算實(shí)際支付金額 ----------------------

# 計(jì)算實(shí)際支付金額(Decimal類型支持高精度運(yùn)算,無科學(xué)計(jì)數(shù)法)

df["actual_payment"] = df["order_amount"] * (Decimal('1.0') - df["discount_rate"])

# ---------------------- 3. 數(shù)據(jù)顯示:調(diào)整格式便于查看 ----------------------

# 設(shè)置Pandas顯示選項(xiàng):Decimal類型按原始格式顯示(避免轉(zhuǎn)為科學(xué)計(jì)數(shù)法)

pd.options.display.max_columns = None  # 顯示所有列

print("處理后的數(shù)據(jù):")

print(df.head())

# ---------------------- 4. 數(shù)據(jù)導(dǎo)出:確保CSV無科學(xué)計(jì)數(shù)法 ----------------------

# 導(dǎo)出時,將Decimal類型轉(zhuǎn)換為字符串(保留原始格式),避免Excel讀取時觸發(fā)科學(xué)計(jì)數(shù)法

df_export = df.copy()

df_export["order_amount"] = df_export["order_amount"].astype(str)

df_export["discount_rate"] = df_export["discount_rate"].astype(str)

df_export["actual_payment"] = df_export["actual_payment"].astype(str)

# 導(dǎo)出CSV

df_export.to_csv("processed_financial_data.csv", index=False, encoding="utf-8")

print("n數(shù)據(jù)已導(dǎo)出至 processed_financial_data.csv,無科學(xué)計(jì)數(shù)法")

結(jié)果驗(yàn)證:

  • 讀取后:order_amount列顯示為Decimal('1234567.89')discount_rate顯示為Decimal('0.0087654321');

  • 計(jì)算后:actual_payment1234567.89 × 0.9912345679 = 1223765.4321,完整保留小數(shù)位;

  • 導(dǎo)出后:CSV 文件中金額列顯示為1223765.4321,無科學(xué)計(jì)數(shù)法,Excel 打開后格式正常。

四、常見問題與避坑指南

在實(shí)際操作中,可能遇到 “配置生效但部分?jǐn)?shù)據(jù)仍顯示科學(xué)計(jì)數(shù)法”“導(dǎo)出后格式回退” 等問題,以下是針對性解決方案:

1. 問題 1:部分極值數(shù)據(jù)仍顯示科學(xué)計(jì)數(shù)法

原因:即使設(shè)置了display.float_format,當(dāng)浮點(diǎn)數(shù)絕對值極?。ㄈ?code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background-color: rgba(27,31,35,.05); font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; word-break: break-all; color: rgb(271,93,108);">1e-16)或極大(如1e20)時,NumPy 底層仍可能強(qiáng)制使用科學(xué)計(jì)數(shù)法。

解決方案:將數(shù)據(jù)轉(zhuǎn)換Decimal類型或字符串類型,徹底脫離 NumPy 的浮點(diǎn)數(shù)顯示規(guī)則:

# 對極值列單獨(dú)處理:轉(zhuǎn)換為Decimal

df["extreme_value"] = df["extreme_value"].apply(lambda x: Decimal(str(x)))

2. 問題 2:導(dǎo)出 Excel 后數(shù)據(jù)變回科學(xué)計(jì)數(shù)法

原因:Excel 對超過 11 位的數(shù)字默認(rèn)采用科學(xué)計(jì)數(shù)法,即使 CSV 中是原始格式,Excel 打開時仍會自動轉(zhuǎn)換。

解決方案

  • 導(dǎo)出時將長數(shù)字列(如訂單編號、金額)設(shè)為字符串類型,并在 Excel 中 “數(shù)據(jù)→分列→文本格式” 導(dǎo)入;

  • 或使用openpyxl庫直接生成 Excel 文件,指定單元格格式為 “文本” 或 “數(shù)值(保留足夠小數(shù)位)”:

from openpyxl import Workbook

from openpyxl.styles import NamedStyle

# 創(chuàng)建Excel工作簿,設(shè)置數(shù)值格式為文本

wb = Workbook()

ws = wb.active

ws.append(df.columns.tolist())  # 添加表頭

# 寫入數(shù)據(jù),所有長浮點(diǎn)列按文本格式寫入

for _, row in df.iterrows():

   ws.append([str(cell) for cell in row.values])

# 保存Excel

wb.save("processed_data.xlsx")

3. 問題 3:converters參數(shù)與dtype參數(shù)沖突

原因:同一列不能同時指定convertersdtype,后者會覆蓋前者的轉(zhuǎn)換結(jié)果。

解決方案:優(yōu)先使用converters處理復(fù)雜格式,簡單格式用dtype,避免重復(fù)配置。

五、總結(jié):不同場景的最優(yōu)方案選擇

針對pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題,需根據(jù) “是否需計(jì)算”“數(shù)據(jù)格式復(fù)雜度”“使用場景” 選擇方案,以下是清晰的選擇指南:

場景需求 推薦方案 優(yōu)勢 適用場景
長浮點(diǎn)數(shù)據(jù)僅展示 / 導(dǎo)出,無需計(jì)算 dtype={列名: str} 操作簡單,完全保留原始格式 訂單編號、銀行卡號、身份證號
長浮點(diǎn)數(shù)據(jù)需計(jì)算,精度要求一般 pd.options.display.float_format + dtype=np.float64 支持?jǐn)?shù)值計(jì)算,配置靈活 普通業(yè)務(wù)數(shù)據(jù)(如銷售金額、增長率)
長浮點(diǎn)數(shù)據(jù)需高精度計(jì)算 converters={列名: Decimal轉(zhuǎn)換函數(shù)} 精度損失,徹底禁用科學(xué)計(jì)數(shù)法 財(cái)務(wù)數(shù)據(jù)、科研數(shù)據(jù)(如濃度、誤差)
數(shù)據(jù)格式復(fù)雜(帶分隔符 / 單位) converters={列名: 自定義清洗函數(shù)} 一步完成清洗與格式控制 帶千位分隔符的金額、帶單位的數(shù)值
需導(dǎo)出 Excel 且格式穩(wěn)定 轉(zhuǎn)換為字符串類型 + Excel 文本格式導(dǎo)入 避免 Excel 自動轉(zhuǎn)換為科學(xué)計(jì)數(shù)法 需交付給業(yè)務(wù)人員的最終數(shù)據(jù)

通過以上方案,可徹底解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時的科學(xué)計(jì)數(shù)法問題,確保數(shù)據(jù)在 “讀取 - 計(jì)算 - 展示 - 導(dǎo)出” 全流程中保持可讀性與精度,滿足不同業(yè)務(wù)場景的需求。

推薦學(xué)習(xí)書籍 《CDA一級教材》適合CDA一級考生備考,也適合業(yè)務(wù)及數(shù)據(jù)分析崗位的從業(yè)者提升自我。完整電子版已上線CDA網(wǎng)校,累計(jì)已有10萬+在讀~ !

免費(fèi)加入閱讀:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }