转换浮点数时出现问题

Problems Converting Floats

提问人:Danny Goodsell 提问时间:10/26/2023 最后编辑:halferDanny Goodsell 更新时间:11/7/2023 访问量:71

问:

我是 Unity 和 C# 的新手。我正在制作一个点击游戏,你可以为了钱而写书。为了计算每本书应该值多少美元,我有一个名为“金钱计算”的脚本,我计算一本具有一定创造力和页数的书应该值多少钱,然后我将页数和书的创造力作为变量发送到我的另一个脚本“金钱展示”。在货币计算中运行简单的数学函数后,我得到了一个整数,这就是我想要的。

这是一个脚本,它生成美元金额,并调用下面的另一个脚本的方法,以获取数字并显示它。这位是“金钱计算”:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Money Calculations : MonoBehaviour
{
    public static int cashAmount;
    public static float pages;
    public static float creativity;
        
    public void displayMoney()
    {
        //money formula
        pages = Mathf.RoundToInt(CriticsP.numOfPages);
        creativity = Mathf.RoundToInt(CriticsC.creativity);
        // -Critics C and P are other scripts
        // -pages and creativity start as float values
       
        cashAmount = (int)(pages / 3) + (int)(creativity * 4);

        //cashAmount is dollar value to be sent to Money Display
        MoneyDisplay.add();
    }
}

在这里,我有显示脚本,“Money Display”

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class MoneyDisplay : MonoBehaviour
{
    public static int cashOnHand;
    public Text cashMoney;

    void Update()
    {
        cashMoney.text = cashOnHand.ToString();
    }
    
    public static void add()
    {
        // **
        cashOnHand += (int)MoneyCalculations.cashAmount;
    }
}

我遇到的问题是我有星号的地方。页面和创造力的原始数字是浮点数,我无法将它们作为整数进行计算。所以我想我可以在显示最终数字 cashOnHand(一个 int)之前将它们转换为 int。尽管我已经多次说过让 C# 将页面和创造力转换为 int,但我认为我一定做错了。当我说游戏显示的数字是一个整数时,与上一个脚本生成的数字完全相同。但出于某种原因,当我告诉计算机(强调星号)时,它会打印一个百搭数字,比如 7880,而不是我需要的 325。我怀疑它正在恢复到它的基本浮点值并从我正在寻找的整数中变化,我不知道为什么当我专门执行 += 函数时数字会返回浮点数,而且我没有办法修复它。cashOnHand = (int)MoneyCalculations.cashAmountcashOnHand * += * (int)MoneyCalculations.cashAmount

为了得到我的编号,我尝试过多次从 float 到 int 的转换,但我无法在整个开发过程中将页码和创造力保持为 int,并且由于缺乏专业知识而不得不使用浮点数。恐怕现在可能为时已晚,因为浮点数在代码中的几个地方根深蒂固,我担心简单的转换可能还不够,但我不知道。如果我的情况没有希望,您能否向我推荐有关在整数上执行数学函数而不必将它们作为浮点数的资源?

C# unity-游戏引擎 数学 游戏开发 转换说明符

评论

0赞 Retired Ninja 10/26/2023
在哪里打电话?就像 ?使用+=将使这个数字变得非常大,如果你每一帧都加到它。您可以考虑在函数之间传递参数,而不是引用其他脚本。displayMoneyUpdate
0赞 Danny Goodsell 10/26/2023
您好,是的,我确保从 money Calculations 的方法内部调用 displayMoney,而不是从 update 方法中调用。最初,我在货币计算中放置了 +=,货币计算将进行计算并将数字显示为文本,但我将这些功能移至 MoneyDisplay,因为它仍在输出大量数字,我想从不同的角度解决问题。我相信生成的数字是转换后的整数的旧浮点值,例如,79 的美元金额将输出类似 79000 的东西
0赞 Absinthe 10/26/2023
简单的答案是不要使用星号——它们是编程语言中的乘数。
1赞 Enigmativity 11/7/2023
你没有给我们一个最小的可重复的例子。您没有向我们提供您的输入编号,因此我们无法知道您的代码或输入是否错误。你甚至没有告诉我们你的实际输出——你只告诉我们它们“是什么样的”。你能解决你的问题吗?
0赞 Enigmativity 11/7/2023
此外,通过创建字段和方法,您正在使您的生活变得比需要的更艰难。static

答: 暂无答案