C#将doubl类型转换为float时,溢出报错OverflowException

代码铺到天琴座 2025-08-18 16:16:52

    昨天C#接收PLC数据,再生成动态曲线图,这一步是成功的

    今天,我嫌两个数a和b一个是0.0-1.0范围内,一个是800左右,放在同一个区域内显示不清晰,就将前者乘以10,后者除以10,二者数值相近,就好在chart1里清晰地显示了,可是调试时报错System.OverflowException:“溢出错误。”

    应当是接收时的数据类型是float,乘以10后自动变成double类型,于是我做转换。代码框里没问题,调试时报错溢出。

    现在的源代码步骤如下:

 

   float a, b;    //初始值,来自于PLC

 

    double a1=a * 10.0f;//乘以10

    double b1=b / 10.0f;//除以10

 

    float a2=(float)a1;    //将double转换为float,以显示在chart1

    float b2=(float)b1;   //将double转换为float,以显示在chart1

 

 

 

...全文
1115 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

补充,如果你不喜欢归一,那么双精度改单精度,你可以用Math.Log10 这个方法。

  • 举报
回复
@wanghui0380 非常感谢您的回答。你的回答让我有方向性地探索,不然就是盲人摸象了。我程序的初始值是接收PLC里的许多数据,第一步是float值。由于有许多参数,数值范围大不相同,为了显示在同一个chart里,就将有的参数乘以1000(比如真空度),有的参数除以10(比如温度),这样整饬下来,都在0-100范围内。可是这样一乘一除,就成了double类型了。这是第二步的数值。我的chart里是float数值,这是第三步的。我只得把第二步的数值从double转换为float。所以就出现了数值溢出问题。(此前没有乘以1000、除以10这些操作,数值从PLC读来后直接显示在chart里,是有动态曲线的。只是有些曲线太矮,看不清)
  • 打赏
  • 举报
回复 1

把后一个统一归一化[0,1]之间即可,当然前提你应该知道后一个东西的最大值和最小值是啥,你做plc数据应该有量程范围,如果文档没写就问一下硬件的人,你按量程范围归一计算即可。
至于归一公式么,随便百度把。我就不贴了。

  • 打赏
  • 举报
回复

这里好冷清呀!

111,115

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧