Tag: 浮点

C#Maths给出了错误的结果!

我理解这个问题背后的原理,但是让我头疼的是认为这在整个应用程序中都会发生,我需要找到解决方案。 double Value = 141.1; double Discount = 25.0; double disc = Value * Discount / 100; // disc = 35.275 Value -= disc; // Value = 105.824999999999999 Value = Functions.Round(Value, 2); // Value = 105.82 我用双打代表很小的数字。 不知何故,在计算141.1-35.275中,结果的二进制表示给出了一个仅为0.0000000000001的数字。 不幸的是,由于我正在舍入这个数字,这给出了错误的答案。 我已经阅读过使用Decimals而不是Doubles但我不能用Decimal替换Double的每个实例。 有没有更简单的方法来解决这个问题?

C ++ / C#与float和double的区别

我们正在将C ++数学库转换为C#。 该库混合使用浮点数和双精度数(有时在它们之间进行转换),我们也试图这样做,以便在C#中获得与C ++中完全相同的结果,但事实certificate这是非常困难的,如果不是不可能的话。 我认为问题是以下一个或多个问题,但我不是专家: 将浮点数转换为double和double转换为浮点数会导致不可预测的结果,并在C ++和C#中以不同方式完成 C ++和C#处理浮点精度的方式不同,它们不能相互模仿 .NET中有一个设置可以使它像C ++一样运行,但我找不到它(都是32位) 有人可以向我解释可能存在的问题,也许可以将我与微软的一些权威文档联系起来,我可以用来帮助解释这种情况以及产生差异的原因吗? 编辑 我们使用的是VC6和.NET4.0 由于NDA,我不能举出计算的例子,但我可以为差异显示一些数字……他们自己可能很无用: 8.085004000000000 (C#) vs. 8.084980000000000 (C++) 8.848165000000000 (C#) vs. 8.848170000000000 (C++) 0.015263214111328 (C#) vs. 0.015263900756836 (C++) 应该指出的是,这些数字包括复杂的问题。 这些是计算结果。

如何限制十进制数?

可能重复: 如何格式化小数 我怎样才能限制我的十进制数,这样我才能得到这个数字后的3位数? eg 2.774

为什么确实返回true?

我想知道你是否可以解释浮点类型的溢出。 float.MaxValue == float.MaxValue + 1 // returns true

如何在C#中获取浮点数的IEEE 754二进制表示

我有一些单精度和双精度浮点数,我想写入并从字节[]中读取。 .Net中有什么东西可以用来将它们转换成32位和64位IEEE 754表示forms吗?

如何在浮点计算中获得-0结果并将其与C#中的+0区分开来?

MSDN文档提到double类型包括负零。 但是, -1.0 / double.PositiveInfinity和-double.Epsilon / 2似乎都返回正常0(并且比较等于它)。 我怎么能得到-0?

从IBM浮点转换为IEEE浮点标准和反向Versa In C#?

正在为我们正在使用的旧系统寻找IEEE浮点数到IBM浮点格式的方法。 我们可以在C#中使用通用公式吗?

从int转换为float的问题

有一种我无法理解的奇怪行为。 同意浮点数是近似值,因此即使显然返回没有十进制数的数的运算也可以近似为带小数的数。 我这样做: int num = (int)(195.95F * 100); 因为它是一个浮点运算,我得到19594而不是19595 ..但这是正确的。 令我困惑的是,如果我这样做 float flo = 195.95F * 100; int num = (int) flo; 我得到19595的正确结果。 知道为什么会这样吗?

对double进行转换是否始终返回相同的值?

铸造double float总是产生相同的结果,还是会有一些“四舍五入的差异”? 例如,是x in float x = (float)0.123456789d; 总是一样的价值? 将float浮动为double,然后将其转换为float,即。 (float)(double)someFloat ? 最感兴趣的是C#中的结果,但如果您对其他语言的工作原理有所了解,请随时分享。

如何在不包含指数表示法的情况下获得浮点值

在C#中,是否可以在float上执行ToString并获取值而不使用指数? 例如,请考虑以下事项: float dummy; dummy = 0.000006F; Console.WriteLine(dummy.ToString()); 这给出了输出 6E-06 但是,我的意思是 0.000006 我能找到的最接近的是使用“F”限定符,但是我需要指定小数位数,否则值将被舍入。 实际上是否有一种自动执行此操作的方法,或者我需要加载一些时髦的逻辑来修剪零或计算出所需的小数位数。 谢谢; 理查德莫斯