使用C#输入数字后显示Invalid input. Please enter a numeric value

在使用C#创建一个窗体应用程序时,想输入一个数字通过部署好的模型得到其输出
但输入数字后却显示Invalid input. Please enter a numeric value。求指教

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Http;
using Newtonsoft.Json;

namespace C__Test
{
    public partial class Form1 : Form
    {
        private static async Task<string> SendHttpRequestAsync(string url, string requestData)
        {
            using (var client = new HttpClient())
            {
                var content = new StringContent(requestData);
                var response = await client.PostAsync(url, content);
                return await response.Content.ReadAsStringAsync();
            }
        }

        public Form1()
        {
            InitializeComponent();
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            Close();
        }

        private async void button2_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBox1.Text))
            {
                if (float.TryParse(textBox1.Text, out float inputValue))
                {
                    var requestData = JsonConvert.SerializeObject(new { instances = new[] { new[] { inputValue } } });
                    var servingUrl = "http://localhost:8501/v1/models/DL_Model_Save:predict";

                    var responseJson = await SendHttpRequestAsync(servingUrl, requestData);
                    var response = JsonConvert.DeserializeObject<PredictionResponse>(responseJson);

                    if (response != null && response.predictions != null && response.predictions.Length > 0)
                    {
                        var predictions = response.predictions[0];
                        textBox2.Text = predictions[0].ToString();
                    }
                    else
                    {
                        textBox2.Text = "Failed to get predictions.";
                    }
                }
                else
                {
                    textBox2.Text = "Invalid input. Please enter a numeric value.";
                }
            }
            else
            {
                textBox2.Text = "Please enter a value.";
            }
        }
    }

    public class PredictionResponse
    {
        public float[][] predictions { get; set; }
    }
}


img

源于chatGPT仅供参考

根据您提供的代码,"Invalid input. Please enter a numeric value." 的错误消息意味着输入的值无法成功解析为浮点数。这可能是由于输入的文本不符合浮点数的格式造成的。

在 C# 中,`float.TryParse()` 方法用于将字符串转换为浮点数。它会尝试将输入的字符串解析为浮点数,并返回一个布尔值表示是否成功解析。如果解析失败,那么 `float.TryParse()` 会将输出参数设置为 0。

要解决这个问题,请确保输入的文本符合浮点数的格式。以下是一些常见的问题和解决方法:

1. 检查文本框的输入:确保用户只输入数字字符和小数点,没有其他非数字字符。

2. 检查小数点的格式:C# 中使用的小数点为英文点号("."),而不是中文的句号("。")。确保小数点的格式正确。

3. 考虑使用 `CultureInfo` 类来指定特定地区的数字格式。例如,可以使用 `CultureInfo.InvariantCulture` 来指定不受地区影响的数字格式。

以下是一个修改后的示例代码,演示了如何使用 `float.TryParse()` 并添加一些输入验证:

```csharp
private async void button2_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(textBox1.Text))
    {
        if (float.TryParse(textBox1.Text, NumberStyles.Float, CultureInfo.InvariantCulture, out float inputValue))
        {
            // 其他代码...

            textBox2.Text = predictions[0].ToString();
        }
        else
        {
            textBox2.Text = "Invalid input. Please enter a numeric value.";
        }
    }
    else
    {
        textBox2.Text = "Please enter a value.";
    }
}

在上述示例代码中,float.TryParse() 方法的第三个参数 NumberStyles.Float 指定了解析浮点数时允许的格式。CultureInfo.InvariantCulture 用于指定不受地区影响的数字格式。

确保您的输入文本与浮点数的格式相匹配,并根据实际情况进行适当的调整。希望这可以解决您的问题。如果仍有疑问,请随时提问。

```