【问题标题】:double.ToString(???) - format to drop digits BEFORE decimal point and show 2 digits AFTER decimal point?double.ToString(???) - 在小数点前删除数字并在小数点后显示 2 位的格式?
【发布时间】:2017-10-30 17:01:33
【问题描述】:
是否可以使用 only ToString() 仅显示美分,例如 1.99.ToString("SOME FORMAT HERE")?
例如如果我希望 1.99 显示为“1 美元 99 美分”怎么办
($"{ Convert.ToInt32(amount) } dollar(s) { amount.ToString("???") } cents")?
【问题讨论】:
标签:
c#
formatting
precision
【解决方案1】:
如果金额是双倍的,这将起作用。如果金额是字符串,那么您将不需要 ToString() 在下一行。请注意,这是假设您在问题中列出的格式:
string line = string.Concat("$", amount.ToString().Split('.')[0], " dollar(s) ", amount.ToString().Split('.')[1].Substring(0,2), " cents");
【解决方案2】:
我认为仅使用ToString 方法是无法做到这一点的,所以这里有另一种方法。
你可以先这样得到小数部分:
var decimalPart = yourDouble - (int)yourDouble;
然后,您可以将小数部分乘以 100 并将结果转换为 int。
var twoDigits = (int)(decimalPart * 100);
要将其转换为两位数的字符串,只需在左侧填充 0:
var result = twoDigits.ToString().PadLeft(2, '0');
【解决方案3】:
我不能只使用 ToString() 来做到这一点,但这几乎是你想要的 :)
double d = 15.12;
var str = d.ToString("0 dollar(s) .00 cents").Replace(".", string.Empty);
无论如何,我建议你创建一个扩展方法来做到这一点:
public static class Extensions
{
public static string ToFormattedString(this double number)
{
var integerPart = Convert.ToInt32(number);
var decimalPart = Convert.ToInt32((number - integerPart) * 100);
return String.Format("{0} dollar(s) {1} cents", integerPart, decimalPart);
}
}
用法:
Console.WriteLine(d.ToFormattedString());