繁体   English   中英

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

[英]double.ToString(???) - format to drop digits BEFORE decimal point and show 2 digits AFTER decimal point?

是否有可能dislay只有量使用toString()将美分,像1.99.ToString(“某种格式HERE”)?

例如,如果我希望 1.99 显示为“1 美元 99 美分”怎么办

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

如果金额是双倍,这将起作用。 如果金额是字符串,那么您将不需要在以下行中使用 ToString() 。 请注意,这是假设您在问题中列出的格式:

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

我认为仅使用ToString方法无法做到这一点,所以这是另一种方法。

你可以先通过这样做得到小数部分:

var decimalPart = yourDouble - (int)yourDouble;

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

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

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

var result = twoDigits.ToString().PadLeft(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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM