2011-11-11 84 views
78

Tôi có một chuỗi số như thế này 2223,00. Tôi muốn chuyển đổi nó thành 2223. Điều này là: không có thông tin sau ",". Giả sử rằng sẽ chỉ có hai số thập phân sau ",".Xóa các ký tự cuối cùng khỏi chuỗi trong C#. Một cách thanh lịch?

tôi đã làm:

str = str.Remove(str.Length - 3, 3); 

Có một giải pháp thanh lịch hơn? Có thể sử dụng một chức năng khác? -Tôi đừng giống như đặt numbers- rõ ràng

Trả lời

166

Bạn có thể thực sự chỉ cần sử dụng quá tải Remove rằng phải mất một tham số:

str = str.Remove(str.Length - 3); 

Tuy nhiên, nếu bạn đang cố gắng để tránh cứng mã hóa độ dài, bạn có thể sử dụng:

str = str.Remove(str.IndexOf(',')); 
+0

Tôi nhận được rất nhiều câu trả lời hay. Nhưng cái này là cái tôi sẽ sử dụng, về mặt tao nhã. Tuy nhiên, tôi không biết, ở ** cấp độ thấp **, cái nào hiệu quả hơn. Vì vậy, làm cho sự lựa chọn của bạn! – Kani

+6

Giải pháp thứ hai là dễ đọc, dễ hiểu và bảo trì hơn, và xét về hiệu suất ** ở mức độ thấp **, sự khác biệt là vô cùng đáng kể. Nếu bạn BIẾT rằng ',' luôn ở vị trí -3, thì giải pháp đầu tiên vẫn OK, nhưng * tối ưu hóa sớm * là một điều khủng khiếp để lãng phí thời gian của bạn. –

+2

@Kani Đầu tiên là hiệu quả nhất - nhưng tôi hoàn toàn đồng ý với Scott. Tôi sẽ luôn luôn chọn thứ hai, trừ khi tôi biết, sau khi profiling, rằng có một sự hoàn hảo. nút cổ chai ở đây. Cả hai (và hầu hết các câu trả lời khác) sẽ rất nhanh - đủ tốt cho gần như tất cả các mục đích. –

4
String.Format("{0:0}", 123.4567);  // "123" 

Nếu giá trị ban đầu của bạn là một số thập phân thành một chuỗi, bạn sẽ cần phải chuyển đổi

String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture)) //3.5 

Trong ví dụ này, tôi chọn văn hóa bất biến nhưng bạn có thể sử dụng cái bạn muốn.

Tôi thích sử dụng hàm Định dạng vì bạn không bao giờ biết liệu số thập phân có thể chứa 2 hoặc 3 số đầu trong tương lai hay không.

Chỉnh sửa: Bạn cũng có thể sử dụng Truncate để xóa tất cả sau, hoặc.

Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5"))); 
+0

Vâng, tôi đang nhận được cùng một số trong trường hợp này, tô màu trắng ** ** ** trên đó. – Kani

+0

Chuỗi chính xác bạn sử dụng là gì và văn hóa của bạn là gì? –

+0

Giống như trong ví dụ: ** dddd, dd **, trong đó ** d ** là một chữ số. Các số thập phân nằm sau **, ** trong trường hợp này. Tôi đang chuẩn hóa một số kết quả, xóa **. ** và **, ** hoặc bằng cách sử dụng **. ** thay vì **, ** – Kani

14

Có lẽ đây:

str = str.Split(",").First(); 
+5

Hoặc thậm chí 'str.Split (", ") [0]' – BoltClock

+0

Tôi nghĩ đây là câu trả lời "thanh lịch nhất" - ít nhất là cho đến nay. –

+1

bạn nghĩ gì về @ ReedCopsey? Tôi nghĩ là một điều rất tốt. – Kani

6

này sẽ trả lại cho bạn một chuỗi bao gồm tất cả mọi thứ sau dấu phẩy

str = str.Substring(0, str.IndexOf(',')); 

Tất nhiên, đây giả chuỗi của bạn thực sự có một dấu phẩy với số thập phân. Đoạn mã trên sẽ thất bại nếu không. Bạn muốn thực hiện nhiều kiểm tra hơn:

commaPos = str.IndexOf(','); 
if(commaPos != -1) 
    str = str.Substring(0, commaPos) 

Tôi giả sử bạn đang làm việc với chuỗi để bắt đầu. Lý tưởng nhất, nếu bạn đang làm việc với một số để bắt đầu với, giống như một float hay double, bạn có thể chỉ cần cast nó vào một int, sau đó làm myInt.ToString() như:

myInt = (int)double.Parse(myString) 

này phân tích cú đúp bằng cách sử dụng văn hóa hiện tại (ở Hoa Kỳ, chúng tôi sử dụng . cho dấu thập phân). Tuy nhiên, điều này một lần nữa giả định rằng chuỗi đầu vào của bạn có thể được phân tích cú pháp.

1

Bạn có thể sử dụng TrimEnd. Nó cũng hiệu quả và trông sạch sẽ.

"Name,".TrimEnd(','); 
+4

Điều đó sẽ chỉ xóa bất kỳ ký tự ',' nào ở cuối chuỗi. Vì chuỗi "123,45" kết thúc bằng chữ số, '" 123,45 ".TrimEnd (',')' sẽ trả về "123,45". – phoog

+0

yep, trên thực tế, không hoạt động ở đây:/ – Kani

+0

@phoog bạn đang đúng –

-2

Sử dụng lastIndexOf.Giống như:

string var = var.lastIndexOf(','); 
1

Sử dụng:

public static class StringExtensions 
{ 
    /// <summary> 
    /// Cut End. "12".SubstringFromEnd(1) -> "1" 
    /// </summary> 
    public static string SubstringFromEnd(this string value, int startindex) 
    { 
     if (string.IsNullOrEmpty(value)) return value; 
     return value.Substring(0, value.Length - startindex); 
    } 
} 

Tôi thích một phương pháp khuyến nông ở đây vì hai lý do:

  1. tôi có thể chuỗi nó với chuỗi con. Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
  2. Tốc độ.
0

Hãy thử cách sau. Nó làm việc cho tôi:

str = str.Split(',').Last(); 
1

Bạn có thể sử dụng LastIndexOf và xâu kết hợp để có được tất cả các ký tự bên trái của chỉ số cuối cùng của dấu phẩy trong nọc.

chuỗi var = var.Substring (0, var.LastIndexOf (','));

Các vấn đề liên quan