【发布时间】:2017-12-17 02:59:33
【问题描述】:
一位同事写了一些代码:
var roundedNumber = (float) Math.Round(someFloat, 2);
Console.WriteLine(roundedNumber);
我不确定此代码 - 此处写入的数字是否还能保证有 2 位小数?在我看来,将双精度 Math.Round(someFloat, 2) 截断为 float 可能会导致字符串表示超过 2 位的数字。任何人都可以提供一个例子(证明这样的演员表是不安全的)或者以某种方式证明执行这样的演员表是安全的吗?
【问题讨论】:
-
为了显示目的,
Console.WriteLine(${someFloat:F2})更简单,更清楚地传达了它的意图。 -
这个answer 并不完全符合您的问题,但可能会对您有所帮助。
-
这似乎不是显示问题。 OP 似乎想要一个四舍五入的
float,而不是一个四舍五入的double -
@itsme86 当然 - 我在上面的代码示例中简化/说谎。在我的真实代码中,浮点数是从服务类中的方法返回的,然后在一些数据结构中传递,然后在一些 JSON 中编码并传递给前端应用程序,等等。但我感兴趣的是一个狭窄的问题,即强制转换为浮点数是否会导致
.ToString()表示不再有 2 个小数位的数字,而这个简单的例子——我承认它显然是错误的代码——足以说明这个问题。 -
@MarkAmery 抱歉,但您能以某种方式重新表述您的问题吗?
rounded值的字符串表示在分隔符后有两个以上的十进制数字:var single= Single.MaxValue; Console.WriteLine(single); var rounded = (Single)Math.Round(single, 2); Console.WriteLine(rounded);rounded因为字符串在我的机器上看起来像3,402823E+38。
标签: c# floating-point rounding