如何将十进制值舍入到最接近的0.05值?,链接的SO帖子也讨论了类似的主题,但它不是我预期的输出.
我需要像这样转换小数值
16.489-->16.49
16.482-->16.48
16.425-->16.43
7.67 --> 7.67 (no conversion)
Run Code Online (Sandbox Code Playgroud)
我可以使用下面的C#方法来转换值
Math.Round(16.482*20)/20;
Run Code Online (Sandbox Code Playgroud)
但这种方法对我不起作用,它给出了以下结果
16.489-->16.5
16.482-->16.5
7.67 --> 7.7
16.425-->16.45
Run Code Online (Sandbox Code Playgroud)
在c#中用优雅的方式来做到这一点.
我有一个类型decimal的变量,其值为1.0.我将它保存到SQL Server 2012表的列中,其类型为decimal(10, 8).
检索该值后,我看到它是1,但是当我调用时ToString(),返回的值是"1.00000000"(见下文).
我意识到8位小数对应于数据库中的数据类型.但是,Entity Framework生成的属性中没有任何属性或任何内容可以为其提供此类行为,因此我不知道这是如何发生的.
以下是我在立即窗口中执行的一些测试:
myDecimal
1
myDecimal.ToString()
"1.00000000"
myDecimal == 1
true
myDecimal == 1.0m
true
Run Code Online (Sandbox Code Playgroud)
正如你在前两次测试中看到的那样,它也不是浮点错误的情况(不是因为十进制是定点而我没想到它,但我不得不尝试它,因为我用完了想法).
知道小数ToString()是如何产生一个8位小数的字符串?
编辑:为了比较,请查看下面的测试.
1m.ToString()
"1"
Run Code Online (Sandbox Code Playgroud) 我的值为1.564和1.565我需要将此值舍入为1.56和1.56,这在c#中适用于此.
我正在尝试将小数点显示为四位小数.数据库将我的数字四舍五入到小数点后4位,但它返回的数字为尾随0(由于字段的小数精度),因此类似于9.45670000.然后,当我这样做时:
string.Format("{0:#,#.####}", decimalValue);
Run Code Online (Sandbox Code Playgroud)
我在页面上得到的输出是9.4567,这就是我想要的.
但是,如果从DB返回的数字是9.45600000,则格式化后的输出为9.456
但我需要显示的是9.4560
如何格式化我的小数,以便小数位数始终为4?
更新:此外,如果我想动态确定小数位数,是否可以使用变量(而不是.0000)?
如何在点之后长时间休息返回小数:
3.786444499963
Run Code Online (Sandbox Code Playgroud)
对此:
3.787
Run Code Online (Sandbox Code Playgroud)
它不仅削减了分数,还围绕其余数字
对不起,如果已经问过这个问题,我就找不到如何在我的问题中做到这一点.我将一个包含1-20的数字列表的文件导入到一个列表框中,然后显示总值和平均值到文本框中.我正在得到正确的计算它只是我不知道如何转换它们.
我的代码是:
int i = 0;
int result = 0;
while (i < lstbxDisplayInfo.Items.Count)
{
result += Convert.ToInt32(lstbxDisplayInfo.Items[i++]);
}
//Displays average.
txtAverage.Text = Convert.ToString((double)result / i);
//Displays Amount.
txtAmount.Text = Convert.ToString((double) i);
Run Code Online (Sandbox Code Playgroud)
我的输出是:
Average: 10.5
Total Amount: 20
Run Code Online (Sandbox Code Playgroud)
我需要输出为:
Average: 10.50
Total Amount: 20.00
Run Code Online (Sandbox Code Playgroud) 我感兴趣的是如何以某种特定的方式将 double 变量舍入到小数点后两位。我到底是什么意思?Math.Round ( number, 2) 工作正常,但是......我有像 17.0449999 这样的数字......
Math.Round(17.044999, 2) // 17.04
Run Code Online (Sandbox Code Playgroud)
但在那种情况下,我想得到 17.05。我找到了一种方法来做到这一点,例如:
Math.Round(17.044999, 3) // returns 17.045
Math.Round(17.045, 2) // returns 17.05
Run Code Online (Sandbox Code Playgroud)
我想问的是有没有其他/更好/更简单的方法来做到这一点?
[编辑]:
我想我发现这有点奇怪的问题。从一开始就:
我们说具体的数字。我必须从奖金中计算 5%,在这种情况下,奖金是 340,9。当我在 Windows 计算器 340,9 * 0.05 中进行计算时,结果是 17,045。我在 Excel 中进行计算时得到的结果相同。但是当我在 C# 中做同样的计算时,我得到类似 17,04499999998 的结果。这显然非常接近 17.045,我们可以轻松地将其四舍五入。但关键是我不能将每个结果四舍五入到小数点后 3 位,因为这可能会改变其他结果。
似乎是特殊情况或 C# 计算“太准确”。
我正在寻找String.Format或ToString()只decimal得到小数部分。
'123.56m => "56"
首先,这不是一个重复的问题,我需要总是有2个精度小数
例如
2应转换为2.00
0应转换为0.00
0.5应转换为0.50
输出数必须是小数
我尝试过的事情
decimal val = 0.5000M
decimal d = Math.Round(val, 2);//gives 0.5 i need 0.50
Run Code Online (Sandbox Code Playgroud)
注意:我不打算将十进制转换为字符串,因为我需要将其作为仅接受十进制值的soap请求发送,因此我没有灵活性将其转换为字符串.
由Jakub Lortz回答的以下代码更新工作正常虽然看起来很复杂
decimal twoPoint00 = new Decimal(200, 0, 0, false, 2);
decimal twoPoint0 = new Decimal(20, 0, 0, false, 1);
Console.WriteLine(twoPoint00) // prints 2.00
Console.WriteLine(twoPoint0) // prints 2.0
他给出了非常简单的解决方案,这也将起作用
decimal val = 0.5000M;
string result = string.Format("{0:f2}", val);
decimal d;
Decimal.TryParse(result, out d);
我想要十进制值到两个精度输出,如下面的输入,
0 78.879860.986至
0.0078.886.000.99在c#十进制值到十进制或字符串.