【问题标题】:float to int conversion oddities in .Net.Net中的float到int转换奇怪
【发布时间】:2022-01-09 08:20:57
【问题描述】:

查看此代码:

public static void Main()
{
    float test = 1.8f;
    Console.WriteLine(test); // 1.8
    
    int intTest = (int)(test * 100);
    Console.WriteLine(intTest); // expected result: 180, but it's 179???
        
    float test2 = test * 100;
    int intTest2 = (int)test2;
    Console.WriteLine(intTest2); // 180 ??
}

https://dotnetfiddle.net/R6u4wA

在 .Net 4.7 中,如果您在转换的同一行中进行计算与先进行计算、将其存储在浮点变量中然后将其转换为整数,那么从 int 到 float 的转换会有所不同。

在 .Net 6 中这很好,但我使用的是 Unity,所以我无法更改编译器。

这是如何解释的?解决此问题的最佳方法是什么?

感谢任何指针!

【问题讨论】:

    标签: string type-conversion integer


    【解决方案1】:

    尝试Convert.ToInt32(test * 100) 而不是(int)(test * 100)

    注意:包括系统命名空间:using System

    【讨论】:

    • 两种方法都使用强制转换,但不知何故,第一个强制转换将其更改为 179,而另一个没有。这也不是“四舍五入”本身的问题。 180 不应该四舍五入到 179。不应该有任何四舍五入,180 是一个非常好的 int 值。在 .Net 6 中,这可以正常工作,因此必须有更多。你是对的,转换工作。但这应该没有必要。
    • 哦,你完全正确,对不起,我没有看到你在这两种方法中都投射了它?我不知道那里发生了什么,对不起
    猜你喜欢
    • 1970-01-01
    • 2017-07-10
    • 2021-04-01
    • 2021-05-03
    • 2016-09-01
    • 2011-09-28
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多