2010-01-16 11 views
8
float f = 0.479f; 
Console.WriteLine(f.ToString("p1")); 

Kết quả: 47,9%Làm cách nào để định dạng giá trị dưới dạng phần trăm mà không có ký hiệu phần trăm?

tôi phải vượt qua những gì để ToString() để loại bỏ các dấu hiệu tỷ lệ phần trăm cho đầu ra như thế này:

47,9

EDIT. Tôi nên đã đề cập rằng tôi đang chuyển mặt nạ cho một thành phần bên thứ 3 mà nó là điều với nó. Tôi không thể thực hiện bất kỳ nhào lộn với những con số không may. Nó phải là mặt nạ làm thủ thuật.

+0

thành phần thứ ba của bạn làm gì với chuỗi được định dạng? nó có giới hạn độ dài văn bản đã định dạng của bạn không? –

+0

@Rubens Bởi vì nó chỉ đơn giản là cung cấp một thuộc tính .FormatString có mặt nạ này. Tất cả các định dạng được thực hiện bởi sự kiểm soát của bên thứ 3. – AngryHacker

+0

Bạn có thể tạo một NumberInfoFormat mới không? Nếu có, hãy kiểm tra bài đăng đã chỉnh sửa của tôi. – keyboardP

Trả lời

9

Tôi có nên nói rằng tôi đi qua các mặt nạ để một bên thứ 3 thành phần nào đó là điều với nó. Tôi không thể thực hiện bất kỳ nhào lộn nào với những con số không may. Nó có là mặt nạ thực hiện thủ thuật.

Vì vậy, tôi cho rằng bạn đang bị mắc kẹt với Float.ToString(String), và rằng bạn chỉ không thể chỉnh sửa p1 trong f.ToString("p1"). Bây giờ đó là một điều khó khăn. Nếu bạn không sợ bất kỳ điều gì liên quan đến thay đổi được ngụ ý, bạn có thể thực hiện các thao tác sau:

Định dạng số "P", được ghi thành On MSDN, sử dụng ký hiệu "%". NumericFormatInfo là thành viên của số CultureInfo hiện tại của bạn. Những gì bạn có thể làm, là sao chép CurrentCulture của bạn, và sửa đổi các PercentSymbol để "" như sau:

static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      float f = 0.479f; 
      Console.WriteLine(f.ToString("p1")); //will write 47.9% 

      CultureInfo ci = CultureInfo.CurrentCulture.Clone() as CultureInfo; 
      ci.NumberFormat.PercentSymbol = "";    

      System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
      Console.WriteLine(f.ToString("p1")); //will write 47.9 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 

     } 
    } 

Đây sẽ là con đường để đi nếu bạn không muốn thay đổi cuộc gọi ToString.

+0

+1, có vẻ là phương pháp đáng tin cậy nhất trong kịch bản OP; có lẽ anh ta sẽ cần phải thay đổi văn hóa hiện tại trực tiếp và khôi phục giá trị mặc định của nó sau cuộc gọi thành phần của bên thứ ba đó. –

2

thể thử

Console.WriteLine(f.ToString("p1").Replace('%',' ')); 

Hoặc, nếu bạn muốn không muốn có một không gian, sử dụng Replace('%','\0')

EDIT: Nếu bạn chỉ có thể sử dụng phương pháp ToString(), bạn có thể tạo một đối tượng NumberFormatInfo, thiết lập biểu tượng phần trăm để trống và chuyển nó vào phương thức. (NumberFormatInfo nằm trong không gian tên System.Globalization) ví dụ:

NumberFormatInfo myNewFormat = new NumberFormatInfo(); 
    myNewFormat.PercentSymbol = ""; 

    float f = 0.479f; 

    Console.WriteLine(f.ToString("p1",myNewFormat)); 
+2

Đối với các điểm toàn cầu hóa tiền thưởng, sử dụng 'NumberFormatInfo.CurrentInfo.PercentSymbol' thay vì hardwiring biểu tượng'% '. (Tôi không có ý tưởng nếu bất kỳ của các nền văn hóa NET *. * Thực sự sử dụng một biểu tượng khác nhau, mặc dù!) Một số nền văn hóa cũng đặt một không gian giữa số và '%' biểu tượng (xem 'NumberFormatInfo.PercentPositivePattern') để ông cũng có thể muốn thực hiện một Trim sau khi làm điều này hoặc anh ta sẽ được trái với một không gian hàng đầu hoặc cuối. – itowlson

+0

+1 - Điểm tốt! – keyboardP

4
Console.WriteLine((f * 100).ToString("0.0")); 
2

Làm thế nào về chỉ sau đây?

Console.WriteLine((f * 100).ToString("F1")); 

ví dụ: f = 0.4792 -> "47.9"

Danh sách và mô tả định dạng số chuẩn có sẵn here on MSDN, trong trường hợp nó giúp.