C# 无法将字符串显式转换为浮点
我使用以下代码在我的unity游戏中格式化货币。但有一些错误消息说无法显式地将字符串转换为浮点C# 无法将字符串显式转换为浮点,c#,unity3d,scripting-language,C#,Unity3d,Scripting Language,我使用以下代码在我的unity游戏中格式化货币。但有一些错误消息说无法显式地将字符串转换为浮点 public float FormatAmount(float amount) { if (amount <= 999) { return amount; } // Thousands 106 else if (amount >= 1000 && amount <=
public float FormatAmount(float amount)
{
if (amount <= 999) {
return amount;
}
// Thousands 106
else if (amount >= 1000 && amount <= 999999) {
return (amount / 1000 + "K");
}
// Millions 106
else if (amount >= 1000000 && amount <= 999999999) {
return (amount / 1000000 + "M");
}
// Billions 109
else if (amount >= 1000000000 && amount <= 999999999999) {
return (amount / 1000000000 + "B");
}
// Trillions 1012
else if (amount >= 1000000000000 && amount <= 999999999999999) {
return (amount / 1000000000000 + "T");
}
// Quadrillions 1015
else if (amount >= 1000000000000000 && amount <= 999999999999999999) {
return (amount / 1000000000000000 + "Quad");
}
// Quintillions 1018
else if (amount >= 1000000000000000000 && amount <= 999999999999999999) {
return (amount / 1000000000000000000 + "Quin");
} else {
return amount;
}
}
您提供的代码有几个问题。 方法签名声明为具有浮点输出: 公开浮动格式金额浮动金额 浮点是输出,定义为浮点。第二个浮点数是输入,它需要一个浮点数。如果在提供浮点数的同时调用函数,这个浮点数是可以的 但是,在你的回报中,你有 返回金额-将通过浮动。 退货金额/1000+K;-它将传递一个字符串。 这里有两种可能性 如果需要一个float作为函数的输出,则只需返回一个float。这意味着你不会有+字母。 如果要保留这些字母并返回字符串,则需要确保只传递字符串。这意味着你可以 退货金额/1000+K;,但是您还需要将.toString添加到只有一个float的return中。 所以最终会是这样的:
您可能还需要考虑PaulF关于float限制的评论,以及Draco18使用外部数字库处理如此大的值的解决方案 这是正确的,您连接了一个字符串,并且您的函数返回float。
更改返回方法类型。您返回的是字符串,但您的方法签名是返回浮点。停止向返回值追加字符串。如果需要,请将返回值更改为字符串。金额/1000+K;,金额/1000000+M,依此类推。你不能那样做。您正在尝试将字符串添加到float。你希望发生什么?@Programmer:如果是这样的话,那就错了,但我认为这是在调整值&为显示输出字符串添加字符串后缀。货币应该始终使用十进制类型。这不是问题所在。请解释一下这怎么不是问题所在?他声明了一个float作为返回参数,并尝试返回一个字符串。他要么得到+字符串的环,要么改变返回类型。或者我错了吗?如果OP确实需要返回字符串-这确实解决了两个返回量以外的问题;需要更改以返回amount.ToString;PaulF发表了我想发表的评论。这取决于你想返回什么,简单地做你答案中的事情并不能解决所有问题。我相信假设他真的想要一根线是可以的。编辑:至于你假设他的代码的其余部分不能解决所有的问题,这和我正在做的是一样的,只是方向相反。
public string FormatAmount(float amount)
{
if (amount <= 999) {
return amount.toString();
}
else if (amount >= 1000 && amount <= 999999) {
return (amount / 1000 + "K");
}
}