2011-09-08 40 views
3

我有十进制货币金额(从SQl2k *表格为32,8),我想将它们四舍五入到小数点后两位。如何将货币(小数)加百万? (C#)

系统将显示1000行,其中有多个数量的行,我需要将各种类别的总计汇总到“快速查看”中。

例如

123,456,789.12345678 
goes to 
123.46 

6,655,443,332.2110099 
goes to 
6,655.44 

我知道有舍入和小数问题/浮点运算:

45,454,454.454545 
goes to 
45.46 OR 45.45 ? 

所以也对什么是最好的使用也将是非常感谢的任何建议。 (什么我期望......不是实际上可能是数学上正确!)

555444444.444444 => 555.44 
555444444.444445 => 555.45 


两个例子我会想到最后“5”的第二个例子级联到小数点以后?

+0

何不干脆devide 1000 ? – sternr

+0

不确定你想要实现什么,如果你绕它们不会改变最终总计? – V4Vendetta

+0

从你的例子来说,你不是四舍五入到达数百万(不管那意味着什么),而是除以1000,然后四舍五入到小数点后两位。 – Polyfun

回答

2
decimal d = Math.Round(inValue/1000000m, 2); 
0
double v = Math.Round(45454454.454545, 2); 

将返回45454454.45

因此,解决办法是:

double factor = 1000000; 
double v1 = Math.Round(123456789.12345678/factor, 2); //// 123.46 
double v2 = Math.Round(6655443332.2110099/factor, 2); //// to 6,655.44 
+0

@BlueChippy:刚完成并测试了我的剪辑 – sll

+0

嗯..我想工作...然后尝试555444444.444444和555444444.444445。我本可以预期,第二个数字后面的5将“级联”并使总数为555.45,但两者都回到555.44。我既是ToEven又是AwayFromZero? – BlueChippy

+0

@BlueChippy - 你为什么期望X.44444445能凑到X.45?你认为X.4449会轮到什么? – AAT