[英]String format from double C#
我有两倍,例如1.890。 我该如何格式化:
我尝试了这个:
switch (price)
{
case (int)scales.zero:
format = "{0:0}";
break;
case (int)scales.one:
format = "{0:0}";
break;
case (int)scales.two:
format = "{0:000}";
break;
case (int)scales.three:
format = "{0:0000}";
break;
case (int)scales.four:
format = "{0:00000}";
break;
case (int)scales.five:
format = "{0:00000}";
break;
default:
format = "{0:0.00}";
break;
}
if (!string.IsNullOrWhiteSpace(format))
res = string.Format(format, value);
return res;
您的默认子句包含一个点:{0:0.00}。 在其他情况下,请这样做:{0:0.00000}具有5个零。 并在格式化前将数字除以100、1000等。
首先,说实话,您的结果有点奇怪。 例如; 除1
情况外,所有结果都带有小数点分隔符,但对于1
情况,它没有任何千位分隔符。 解决这个问题还不错 ,但对我来说似乎很奇怪。
其次,我认为您的double是1890
而不是1.890
因为当您使用枚举值时,看起来它们将double型值除以它们的值与幂10
。
如果是这样,让我们先定义您的枚举值。
enum scales
{
zero = 1,
one = 10,
two = 100,
three = 1000,
four = 10000,
five = 100000
}
其次,创造一种具有的文化.
作为小数点分隔符,并将空字符串作为千位分隔符。 为此,让我们Clone
一个InvariantCulture
并将其NumberGroupSeparator
设置为空字符串。
var culture = (CultureInfo)CultureInfo.InvariantCulture.Clone();
culture.NumberFormat.NumberGroupSeparator = string.Empty;
然后,在将double值除以数学枚举值之后,可以使用该区域性使用"N"
格式说明符和适当的精度来格式化结果。
double d = 1890;
int price = 1;
string result = "";
switch (price)
{
case (int)scales.zero:
d = d / (int)scales.zero;
result = d.ToString(culture);
break;
case (int)scales.one:
d = d / (int)scales.one;
result = d.ToString("N1", culture);
break;
case (int)scales.two:
d = d / (int)scales.two;
result = d.ToString("N2", culture);
break;
case (int)scales.three:
d = d / (int)scales.three;
result = d.ToString("N3", culture);
break;
case (int)scales.four:
d = d / (int)scales.four;
result = d.ToString("N4", culture);
break;
case (int)scales.five:
d = d / (int)scales.five;
result = d.ToString("N5", culture);
break;
default:
break;
}
Console.WriteLine(result);
你可以的值更改price
,以10
, 100
, 1000
, 10000
, 100000
这将是产生结果,你想要什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.