我需要将十进制货币值显示为字符串,其中美元和美分与中间的文本分开。
123.45 => "123 Lt 45 ct"
我提出了以下解决方案:
(value*100).ToString("#0 Lt 00 ct");
但是,这种解决方案有两个缺点:
有没有其他优雅而简单的解决方案?
答案 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;