【问题标题】:Variable Conversion decimal to int变量转换十进制到整数
【发布时间】:2014-10-05 05:21:01
【问题描述】:

如果我将十进制值显式转换为整数值,十进制值会被截断还是四舍五入?

例如:如果d = 8.89

int i = (int)d;

i 会是 8 还是 9??

【问题讨论】:

  • 很可能被截断。您使用什么语言?另外,这甚至不是一个问题,编译器 5 秒就能告诉你答案。
  • 我正在使用 C#,但我想知道一般的编程规则,而不仅仅是一种特定的语言。不过还是谢谢:)
  • 我不会说它与语言无关,不同的编译器遵循不同的标准。例如,假设所有索引值都从 0 开始是不好的,lua 肯定不遵循该编程规则。

标签: c# variables type-conversion


【解决方案1】:

它将截断为 8。

如果你想让它变圆,你可以使用类似的东西:

int i = (int)Math.round(d);

【讨论】:

  • (int)Math.round(d) 通常是不合适的。使用返回整数的舍入实现 - 然后不需要强制转换。
【解决方案2】:

来自 C# 语言规范 V51 §6.2.1 显式数字转换

对于从十进制到整数类型的转换,源值向零舍入到最接近的整数值,该整数值成为转换的结果。如果生成的整数值超出目标类型的范围,则会引发 System.OverflowException。

具有类似decimal 类型的其他语言/平台可能有不同的规则:在每种情况下,您都需要检查特定于该语言/平台的规则。例如。 T/SQL 的规则是different:

默认情况下,SQL Server 在将数字转换为精度和小数位数较低的小数或数值时使用舍入。但是,如果 SET ARITHABORT 选项为 ON,则 SQL Server 会在发生溢出时引发错误。仅损失精度和规模不足以引发错误。


1 包含在 Visual Studio 2013 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 2010-10-16
    • 2014-04-16
    • 1970-01-01
    • 2017-01-27
    • 2015-04-23
    相关资源
    最近更新 更多