所以我已经得到了我最后一个问题的答案(我不知道为什么我没有想到这一点).当我没想到它的时候,我正在打印一个圆润的double使用cout.如何使用全精度cout打印double?
我有一个双"138630.78380386264",我想将它转换为十进制,但是当我这样做时,我通过铸造或使用Convert.ToDecimal(),我失去精度.
这是怎么回事?decimal和double都可以保存这个数字:

double doub = double.Parse("138630.78380386264");
decimal dec = decimal.Parse("138630.78380386264");
string decs = dec.ToString("F17");
string doubse =DoubleConverter.ToExactString(doub);
string doubs = doub.ToString("F17");
decimal decC = (decimal) doub;
string doudeccs = decC.ToString("F17");
decimal decConv = Convert.ToDecimal(doub);
string doudecs = decConv.ToString("F17");
Run Code Online (Sandbox Code Playgroud)
另外:如何使用ToString()on double打印出与调试器显示的相同的结果?例如138630.78380386264?
我有一个浮动值:12345.6489
我使用时格式化:
(12345.6489f)的ToString( "F1")
然后我得到了结果
12345.7
但这是不正确的,因为它应该是12345.6.
有谁知道为什么会这样?另一个提示是在格式化之前转换为double会返回正确的结果,如果我的浮点值稍微小一点,例如1234.6489,那么我也得到正确的结果.
你好,我在C#中有这个代码:
float n = 2.99499989f;
MessageBox.Show("n = " + n.ToString("f2", CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)
而这个C++代码:
float n = 2.99499989f;
printf("n = %.2f", n);
Run Code Online (Sandbox Code Playgroud)
第一个输出3.00.
第二个输出2.99.
我不知道为什么会这样.
更新:
我也尝试了Objective-C NSLog,输出为2.99.
我需要快速修复它,所以我使用以下方法:
float n = 2.99499989f;
float round = (float)Math.Round(n, 2);
MessageBox.Show("round = " + round.ToString(CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)
此代码显示2.99,但以双精度计算舍入.我找不到Math.RoundF.