double.ToString(???) - 格式在小数点之前删除数字并在小数点后显示2位数?

时间:2017-10-30 17:01:33

标签: c# formatting precision

是否有可能仅使用 ToString()来释放金额,例如1.99.ToString(“SOME FORMAT HERE”)?

e.g。如果我希望1.99显示为“1美元99美分”

,该怎么办?

($"{ Convert.ToInt32(amount) } dollar(s) { amount.ToString("???") } cents")

3 个答案:

答案 0 :(得分:0)

如果金额是双倍,这将有效。如果amount是string,那么你不需要在下一行中使用ToString()。请注意,这是假设您在问题中列出的格式:

string line = string.Concat("$", amount.ToString().Split('.')[0], " dollar(s) ", amount.ToString().Split('.')[1].Substring(0,2), " cents");

答案 1 :(得分:0)

我认为你只能用ToString方法做到这一点,所以这是另一种方式。

您可以先执行此操作来获取小数部分:

var decimalPart = yourDouble - (int)yourDouble;

然后,您可以将小数部分乘以100并将结果转换为int。

var twoDigits = (int)(decimalPart * 100);

要将其转换为两位数字符串,只需将0填充到左侧:

var result = twoDigits.ToString().PadLeft(2, '0');

答案 2 :(得分:0)

我不能仅使用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());