在使用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; }
}
}
源于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
用于指定不受地区影响的数字格式。
确保您的输入文本与浮点数的格式相匹配,并根据实际情况进行适当的调整。希望这可以解决您的问题。如果仍有疑问,请随时提问。
```