2016-12-19 27 views
1

最近,我已經嘗試解決30天的代碼挑戰在哈克蘭克的第1天數據類型課,我碰到一個奇怪的路障。編譯器總是說我的輸出是錯誤的答案,但我打印出完全相同的整數double和string。 唯一不同的是,我的double上沒有小數點,這是沒有意義的,因爲我所做的唯一事情是從輸入讀取,將輸入從字符串轉換爲double,然後將兩個雙打加在一起C#Hackerrank代碼在數據類型挑戰30天的代碼產生正確的結果,但說我錯了

你們能幫忙嗎?這是我的C#代碼。

using System; 
using System.Collections.Generic; 
using System.IO; 



class Solution { 
    static void Main(String[] args) { 
     int i = 4; 
     double d = 4.0; 
     string s = "HackerRank "; 

    //this is the start of my code,the top part is preset by hackerrank 
int a=Convert.ToInt32(Console.ReadLine()); 
double x = Convert.ToDouble(Console.ReadLine()); 
string l = Console.ReadLine(); 

Console.WriteLine(a+i); 
Console.WriteLine(d+x); 
Console.WriteLine(s+l); 

Console.ReadLine(); 

} 
} 

這裏有輸入他們要我用,我現在用:

12 
4.0 
is the best place to learn and practice coding! 

這裏是我的輸出:

16 
8 
HackerRank is the best place to learn and practice coding! 

和輸出他們想:

16 
8.0 
HackerRank is the best place to learn and practice coding! 

a你可以看到我的「.0」缺少我的雙倍,任何幫助?

回答

1

可以使用.ToString()與過載來格式化你的結果:

Console.WriteLine((d+x).ToString("#.0")); 

0表示默認佔位符,如果沒有小數點它將增加0。否則它會顯示實際值。

爲了回答您的意見:

#表示任何數目的之前的.

爲什麼它地帶你的情況.0:根據MSDN,Console.WriteLine(double)表示使用默認ToString("G")過載的輸出作爲string

通過調用 Double.ToString方法生成值的文本表示形式。 Source

一般(「G」)格式說明轉換一個數字,以更緊湊 是固定點或科學記數法,這取決於 類型的數目的和是否一個精度說明存在的。 Source

根據上述文件,如果你要你的數據類型更改爲decimal而不是double.0應予以保留。

+0

所以0代表一個默認的佔位符,那麼「#」是做什麼的? – Ventus

+0

也謝謝,它工作,但爲什麼我的小數點消失?我不想將這個問題標記爲答案,因爲我真的需要知道這一點,因爲我不認爲我應該就此發表一個單獨的帖子。 – Ventus

+0

更新了我的回答 – JanR