如何将C#中分隔的美元和美分的十进制转换为字符串值?

时间:2010-11-25 10:23:44

标签: c# decimal tostring currency

我需要将十进制货币值显示为字符串,其中美元和美分与中间的文本分开。

123.45 => "123 Lt 45 ct"

我提出了以下解决方案:

(value*100).ToString("#0 Lt 00 ct");

但是,这种解决方案有两个缺点:

  1. 向同事程序员展示这个解决方案时,它似乎不直观,需要一些解释。
  2. 总分全部显示为两位数。 (对我来说不是真正的问题,因为目前这是我需要它显示的方式。)
  3. 有没有其他优雅而简单的解决方案?

3 个答案:

答案 0 :(得分:8)

这是一个相当简单的操作。它应该以某种方式完成,让你的同事们立即理解。你的解决方案非常聪明,但这里不需要聪明。 =)

使用类似

的详细信息
double value = 123.45;
int dollars = (int)value;
int cents = (int)((value - dollars) * 100);
String result = String.Format("{0:#0} Lt {1:00} ct", dollars, cents);

答案 1 :(得分:0)

这可能有点过头了:

decimal value = 123.45M;

int precision = (Decimal.GetBits(value)[3] & 0x00FF0000) >> 16;
decimal integral = Math.Truncate(value);
decimal fraction = Math.Truncate((decimal)Math.Pow(10, precision) * (value - integral));

Console.WriteLine(string.Format("{0} Lt {1} ct", integral, fraction));

十进制二进制表示的格式记录为here

答案 2 :(得分:0)

我在上面接受的答案中遇到了一些错误(这会使我的结果减少一分钱)

这是我的更正

 double val = 125.79;
 double roundedVal = Math.Round(val, 2);
 double dollars = Math.Floor(roundedVal);
 double cents = Math.Round((roundedVal - dollars), 2) * 100;