Tôi có yêu cầu định dạng số lớn như 4,316.000 thành "4,3m".Định dạng số lớn với .NET
Làm cách nào để thực hiện điều này trong C#?
Tôi có yêu cầu định dạng số lớn như 4,316.000 thành "4,3m".Định dạng số lớn với .NET
Làm cách nào để thực hiện điều này trong C#?
Bạn có thể sử dụng Log10 để xác định ngắt chính xác. Một cái gì đó như thế này có thể làm việc:
double number = 4316000;
int mag = (int)(Math.Floor(Math.Log10(number))/3); // Truncates to 6, divides to 2
double divisor = Math.Pow(10, mag*3);
double shortNumber = number/divisor;
string suffix;
switch(mag)
{
case 0:
suffix = string.Empty;
break;
case 1:
suffix = "k";
break;
case 2:
suffix = "m";
break;
case 3:
suffix = "b";
break;
}
string result = shortNumber.ToString("N1") + suffix; // 4.3m
Đã bỏ phiếu cho sự thật. –
Gotta yêu cách tiếp cận Dao cạo của Occam! – code4life
chia số cho 1000000.0, sau đó nối "m".
nhớ làm tròn số đến 1 chữ số thập phân.
hoạt động nếu nó luôn cố gắng làm hàng triệu, nhưng không phải nếu anh ta muốn hàng ngàn, hàng triệu, hàng tỷ, v.v. –
câu hỏi được hỏi về các số như 4,316.000 là "4,3m", các định dạng khác không có trong yêu cầu :) –
long valueToFormat = 4316000;
var dict = new Dictionary<long, string>() {
{1000000000, "b"},
{1000000, "m"},
{1000, "k"}
};
string formattedValue = valueToFormat.ToString();
foreach (long n in dict.Keys.OrderBy(k => k)) {
if (valueToFormat < n) {
continue;
}
double value = Math.Round(valueToFormat/(double)n, 1);
formattedValue = String.Format("{0}{1}", value, dict[n]);
}
Console.WriteLine(formattedValue);
Nếu bạn chỉ chạy trên Windows, bạn có thể sử dụng một tuyên bố p-gọi trong C# hoặc VB.NET để gọi Win32 chức năng StrFormatByteSizeW hoặc StrFormatByteSize64. Nếu ứng dụng/trang web của bạn được đảm bảo chạy trên ít nhất là Vista SP1 hoặc Server 2008, thì cũng có StrFormatByteSizeEx với một vài tùy chọn khác.
mẫu từ các tài liệu MSDN:
Numeric value Text string
532 532 bytes
1340 1.30KB
23506 22.9KB
2400016 2.29MB
2400000000 2.23GB
Những API cũng xử lý nội địa hóa một cách chính xác cho người sử dụng không phải tiếng Anh.
Điều này sẽ không làm 4.316.000 là "4.3m", giống như câu hỏi được hỏi, nhưng thay vì "4.12MB" –
Rất tiếc, hãy đọc câu hỏi liên quan đến ước số nhị phân, thay vì số thập phân. – devstuff
public static class Program
{
private static void Main(string[] args)
{
double[] numbers =
{
3000, 3300, 3333, 30000, 300000, 3000000, 3000003, 0.253, 0.0253, 0.00253, -0.253003
};
foreach (var num in numbers)
{
Console.WriteLine($"{num} ==> {num.Humanize()}");
}
Console.ReadKey();
}
public static string Humanize(this double number)
{
string[] suffix = {"f", "a", "p", "n", "μ", "m", string.Empty, "k", "M", "G", "T", "P", "E"};
var absnum = Math.Abs(number);
int mag;
if (absnum < 1)
{
mag = (int) Math.Floor(Math.Floor(Math.Log10(absnum))/3);
}
else
{
mag = (int) (Math.Floor(Math.Log10(absnum))/3);
}
var shortNumber = number/Math.Pow(10, mag*3);
return $"{shortNumber:0.###}{suffix[mag + 6]}";
}
}
này nên đầu ra:
3000 ==> 3k
3300 ==> 3,3k
3333 ==> 3,333k
30000 ==> 30k
300000 ==> 300k
3000000 ==> 3M
3000003 ==> 3M
0,253 ==> 253m
0,0253 ==> 25,3m
0,00253 ==> 2,53m
-0,253003 ==> -253,003m
Um, ngôn ngữ lập trình? Nền tảng? Giúp chúng tôi ở đây. Câu trả lời ngắn gọn là: viết một số mã để định dạng các dải giá trị khác nhau một cách thích hợp dựa trên các yêu cầu. –
@Jim: C# nằm trong thẻ cho câu hỏi. Câu hỏi có thể giúp bằng cách làm cho điều đó rõ ràng hơn một chút. –
Jim là một con troll! –