这应该很简单,但我找不到内置的方法,.net框架必须有一个方法来做到这一点!
private decimal RoundDownTo2DecimalPlaces(decimal input)
{
if (input < 0)
{
throw new Exception("not tested with negitive numbers");
}
// There must be a better way!
return Math.Truncate(input * 100) / 100;
}
Run Code Online (Sandbox Code Playgroud) 我有一个简单的乘法问题,我无法理解......我正在使用.Net Framework 4,并在x86中构建.我正在执行以下代码:
double x = 348333.673899683;
double y = 4521014.98461396;
double aux = x * y;
Run Code Online (Sandbox Code Playgroud)
aux的预期值是1574821759346,09949827752137468(我用一个简单的计算器完成了它).但是,我在aux中获得的值是1574821822464.看到这不是精度错误,即使整数部分已被更改.
如果我在乘法中放置一个断点并将鼠标悬停在de*运算符上,我看到x*y = 1574821759346.0994即可.如果我将鼠标悬停在aux变量上,我会看到aux = 1574821822464
为了澄清最后一段,下面可以看到两张图:
首先,我认为可能是因为x86编译,但是阅读下一篇文章,我放弃了这个选项:
我无法理解这里发生了什么.任何帮助将不胜感激.
---编辑更多信息---
我正在使用VS2015.我添加了三行来调试它:
log.Info(x);
log.Info(y);
log.Info(aux);
Run Code Online (Sandbox Code Playgroud)
要显示日志我正在使用库log4net.输出是:
23322 [8] INFO Art.Model.Scenarios (null) - 348333,673899683
24745 [8] INFO Art.Model.Scenarios (null) - 4521014,98461396
26274 [8] INFO Art.Model.Scenarios (null) - 1574821822464
Run Code Online (Sandbox Code Playgroud)
因此,它不是debuger中的错误.如果我创建一个全新的项目和解决方案,它可以正常工作,但我无法理解为什么不在这个解决方案中工作.
---第二次编辑---
感谢我的评论,我尝试了一些新的东西:
double x = 348333.673899683;
double y = 4521014.98461396;
double aux …Run Code Online (Sandbox Code Playgroud) 我目前正在显示一个四舍五入到小数点后 3 位的数字,例如 0.31,使用 Math.Pow,唯一的问题是我想将此数字显示为 0.310(用于样式目的)有谁知道这是否可能?
例如.
Math.Round(2.314, 2) //2.31
Math.Round(2.301, 2) //2.3 , but I want this as 2.30
Run Code Online (Sandbox Code Playgroud) 我不想圆,我想在小数点后取4个位置.
例:
double something = 0.00038;
Run Code Online (Sandbox Code Playgroud)
我想要结果
0.0003 // 8 is discarded
Run Code Online (Sandbox Code Playgroud)
我怎么能实现这一目标?