min*_*int 8 c# decimal rounding
在C#中,我试图得到一个双精度的最后两位小数,没有四舍五入.我从什么都试过Math.Floor来Math.Truncate,并没有什么工作.
我想要的结果样本:
1,424.2488298 -> 1,424.24
53.5821 -> 53.58
10,209.2991 -> 10,209.29
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Ed *_* S. 23
好吧,数学上很简单:
var f = 1.1234;
f = Math.Truncate(f * 100) / 100; // f == 1.12
Run Code Online (Sandbox Code Playgroud)
将小数点后两位移到右侧,转换为int以截断,将其移回左侧两个位置.框架中可能还有一些方法可以做到这一点,但我现在看不出来.你可以概括一下:
double Truncate(double value, int places)
{
// not sure if you care to handle negative numbers...
var f = Math.Pow( 10, places );
return Math.Truncate( value * f ) / f;
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 14
我的建议是:停止使用double摆在首位.如果你需要十进制舍入,那么你应该使用的赔率很高decimal.你的申请是什么?
如果你有双,你可以这样做:
double r = whatever;
decimal d = (decimal)r;
decimal truncated = decimal.Truncate(d * 100m) / 100m;
Run Code Online (Sandbox Code Playgroud)
请注意,如果double的绝对值大于792281625142643375935439504,则此技术将失败,因为乘以100将失败.如果您需要处理大的值,那么您将需要使用特殊技术.(当然,到双倍大的时候,你的能力远远超出它在小数位后用两位数表示值的能力.)
| 归档时间: |
|
| 查看次数: |
27552 次 |
| 最近记录: |