2012-03-02 32 views
0

是否可以格式化一個double,所以他沒有機會使用2140.76到214076的文本,而是讓它成爲2140.76?使用小數格式化一個雙精度C#

我不能使用','作爲十進制數,因爲我正在閱讀的整個文本文件都是使用'。'的數字。用於分離的小數,10000條記錄,每天都這麼......

編輯:

double natMB = 0; 
boolean check = double.TryParse(splitline[8], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out natMB); 
if (check == false) 
{ 
    natMB = 0; 
} 
else 
{ 
    natMB = natMB * 1024; 
} 

double intMB = 0; 
boolean check2 = double.TryParse(splitline[9], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out intMB); 
if (check2==false) 
{ 
    intMB=0; 
} 
else 
{ 
    intMB = intMB * 1024; 
} 

0值是必要的,因爲我需要在SQL語句中輸入這些值,他們需要顯示爲0,而不是null。

+0

你知道,在小數部分一些國家默認的分隔符是逗號,在其他國家的點?這被稱爲文化設置。 – Kamil 2012-03-02 08:08:24

+0

我不瞭解文化背景,但現在我知道了!我仍然在這裏學習...:s – Dashzapp 2012-03-02 08:15:47

+0

所以要注意數字,日期和時間格式。在語言不同的系統中,它們可能會有所不同。例如 - 在我國的默認分數分隔符是「,」。在美國有12小時的時間格式(並且不能簡單地按照這種方式對時間進行排序)。 – Kamil 2012-03-02 08:22:30

回答

1

你的問題是不明確的,你想解析來自一個字符串雙點十進制分隔符?

如果是嘗試用這樣的:

double.Parse("2140.76", CultureInfo.InvariantCulture) 
0

是否有可能格式的雙所以他沒有機會文字2140.76至214076而是 讓它成爲2140.76?

是的。讓我玩弄無知 - 我不知道你甚至可以問這個問題,並給出了廣泛的格式化方法poroblem。

我不能使用','爲十進制數,因爲我正在閱讀的整個文本文件是使用'。'的數字 。爲了分隔小數點,每天有10000條記錄,所以...

所以問題可能是你的手邊有文化問題,而另一邊是無知的開發者。無知,因爲文件交換應始終以英文格式化,以避免這種情況。

無論如何,基本上: *在線程中將您的文化信息更改爲英語或 *使用英語文化信息進行解析和文本生成。

請閱讀您使用的方法的文檔 - 可以調整格式的verlaods。

+0

「文件轉換總是應該總是英文格式化」,那麼uhm不應該是「InvariantCulture」格式? – 2012-03-02 08:03:06

+0

InvariantCulture是的,但主要是英語......問題是,如果你爲exahgne寫一個文件並告訴某人它是InvariantCulture,你可能會看到一個空白的外觀,因爲這是一個.NET特定術語。而且你不能在文件交換中假設人們知道.NET術語;)因此,我更喜歡使用英語 - 所以當大腦進入谷歌模式時,Java或C++程序員不會讓我看起來空白;) – TomTom 2012-03-02 08:05:11

+1

我可以同情但是(因爲我不是美國公民;-),我仍然覺得很困難。例如,「不變」和「en-US」之間存在不同的「英語」文化(不論是否使用.NET),甚至有[差異](http://stackoverflow.com/a/2329317/21567)我假設你指的是)文化。值得注意的是24小時制和12小時制。一般來說,我已經學會了明確地在文件(界面)中做出每個假設。包括但不限於數字格式,特別是允許的字符集(但我現在從OP的問題中脫離出來;-) – 2012-03-02 08:12:25

1

可以使用固定區域性格式化數與小數期間,無論您當地的文化設置:

string formatted = someDouble.ToString(CultureInfo.InvariantCulture); 
相關問題