为什么我不能调用Math.Round(double,int)重载?
在.NET库中,有像 的功能 System.Math.Round(double, int) 但是,为什么我需要施放双重价值才能使其正常工作.?? 查看以下屏幕截图: 解决方案 以下功能 Math.Round(double value, int digits) 返回double.我看到您试图将名称的float定义为Math.Round(n,2)的输出,其中n是价值1.12345的双重1.12345和2代表使用以下代码 double n = 1.12345; float d = Math.Round(n,2); 您实际上会遇到错误,因为上述功能的输出是double而不是float. Cannot implictly convert type 'double' to 'float'. An explicit conversion exists (are you missing a cast?) 您可以通过将float d = Math.Round(n
4 2024-04-26
编程技术问答社区
在C#中把两个字节转换为一个IEEE-11073的16位SFLOAT
我需要根据IEEE-111073将两个字节阵列转换为SFLOAT格式. 我该怎么做? 我在这里回答我的问题. public float ToSFloat(byte[] value) { if (value.Length != 2) throw new ArgumentException(); byte b0 = value[0]; byte b1 = value[1]; var mantissa = unsignedToSigned(ToInt(b0) + ((ToInt(b1) & 0x0F) > 4, 4); return (float)(mantissa * Math.Pow(10, exponent));
0 2024-04-26
编程技术问答社区
如何得到一个变量的浮动值的输出
i有follwing问题. 想要在float 中获得结果 假设 int a= convert.toint32(textbox1.text); int b= convert.toint32(textbox2.text); float ans= math.sqrt(a*b); label1.text= ans.tostring(); 输出.. a=7 b=3 ans应该为4.582 但是我有一个错误 不能隐式将'double'转换为" float". pls help ..我怎么能得到浮动ans ... 解决方案 将您的代码更改为 double ans = math.sqrt(a*b); 其他解决方案 双double只是一个较大的浮子. Math.sqrt()返回双重,而不是浮点.您可以在双倍类型的双重数字中拟合更多的数字,因此在您的代码中,编译器不能保证自动转换不会丢失重要数据,因此异常. . 要解决这个问题,您有两个选择:
10 2024-04-26
编程技术问答社区
傅里叶变换四舍五入误差
我正在处理傅立叶变换.现在,我创建了一个执行DFT的类(不做FFT ATM之类的事情)的类.这是我使用的实现: public static Complex[] Dft(double[] data) { int length = data.Length; Complex[] result = new Complex[length]; for (int k = 1; k
8 2024-04-25
编程技术问答社区
在c#中导入一个.wav文件并提取信号的双倍数数组
我正在进行一个关于音频信号处理的项目,我需要在C#中导入WAV文件,并提取包含信号数据的双打或浮点数.我发现的大多数音频库教程似乎都没有做到这么低级的事情.任何帮助将不胜感激,谢谢. 解决方案 http://www.codeproject.com/kb/audio -video/playwavfiles.aspx 该站点帮助了我,但是由于进口的WAV文件,.EXE文件变得非常大.因此,通过电子邮件发送项目将是一个问题. :) 我希望我不会太晚;您很久以前发布了此内容...
8 2024-04-25
编程技术问答社区
打开32位浮动图像导致OutOfMemoryException
我正在Visual Studio 2017 RC中运行控制台应用程序.执行下面的代码时,我会得到System.OutOfMemoryException: 'Out of memory.'异常. 图像即时试图加载是32位浮点图像. 加载16位浮子图像工作正常. 我尝试将 plattform 类型设置为x64 x64中的配置管理器. using System.Drawing; namespace ConsoleAppImageTest { class Program { static void Main(string[] args) { string PathToFile = @"D:\img\rgb32bitF.tiff"; Image img = Image.FromFile(PathToFile); } } } 解决方案 尝试其他解决方案
6 2024-04-25
编程技术问答社区
linq to sql奇怪的浮动行为
我有一个双重问题(在此处税收量),当它通过函数时,它的价值没有相同的值: 我第一次调用函数 DataContext.UpdateCategory(theCategorie.Code, theCategorie.Description, theCategorie.TaxRate, theCategorie.TaxCode); 当我运行调试器时,税收的价值为 19.6 然后,当我在DBML函数中放置停止点时: [Function(Name="dbo.UpdateCategory")] public int UpdateCategory([Parameter(Name="Code", DbType="VarChar(20)")] string code, [Parameter(Name="Description", DbType="NVarChar(512)")] string description, [Parameter(Name="TaxRate", Db
2 2024-04-25
编程技术问答社区
检查一个浮点变量是否为整数的最可靠方法是什么?
我可以想到几种方法,例如 Convert.ToInt32(floatingPoint) - floatingPoint == 0; Math.Truncate(floatingPoint) - floatingPoint == 0; floatingPoint % 1 == 0; Math.Floor(floatingPoint) == floatingPoint; //etc... 但是哪种方法最可靠? 解决方案 您不应检查零的精确平等,因为浮点数通常只包含与您分配给它的数字的最接近的近似值. 例如,类型代表的最接近的值可能是42.00000000000000662,您仍然需要算作整数值. 取值和圆形值之间的差异,然后以该值的绝对值(以免负面),并与一个小值进行比较: if (Math.Abs(Math.Round(floatingPoint) - floatingPoint)
2 2024-04-24
编程技术问答社区
谁能给我解释一下这种浮点的怪异现象?
我试图循环浏览这样的浮子的所有可能值: float i = 0.0F; float epsilon = float.Epsilon; while (i != float.MaxValue) { i += epsilon; } ,但是在达到该值2.3509887e-38f之后,它停止增加. float init = 2.3509887E-38F; float f = (init + float.Epsilon); Console.WriteLine(f == init); 我只是好奇,谁能确切解释为什么? 所以,我可以在四舍五入错误前将epsilon添加到浮点16777216次,而这个数字看起来非常熟悉(2^24). 解决方案 这里有很多非常羊毛的想法.浮点数不是"不精确".没有"可能".这是一个确定性的系统,就像计算机上的其他任何内容一样. 不要通过查看十进制表示形式来分析发生了什么.如果您在二进制或十六进制中查看这些数字,则这种行为的来源
0 2024-04-24
编程技术问答社区
为什么这个问题的结果是不同的?
我遇到了以下算术问题. 但结果与普通数学操作不同,为什么这样? double d1 = 1.000001; double d2 = 0.000001; Console.WriteLine((d1-d2)==1.0); 解决方案 我想您在乔恩·斯基特(Jon Skeet)的布拉迪安(Brainteasers)页面上找到了一个问题?答案列出并解释了在同一网站上 > 对于参考问题,这是从该页面复制的答案. 3)愚蠢的算术 计算机本来应该擅长算术,不是吗?为什么要打印" false"? double d1 = 1.000001; double d2 = 0.000001; Console.WriteLine((d1-d2)==1.0); 答案:这里的所有值都存储为二进制浮点.虽然1.0可以精确存储,但实际上将1.000001存储为 1.0000009999999999917733362053695600479841232998046875和0.000
0 2024-04-24
编程技术问答社区
是否有相当于c++ fesetround()函数的C#函数?
我正在为间隔算术编写C#库,为此,我需要 将浮点操作舍入模式设置为上下.我知道在C ++中 可以通过FESETROUND()函数来实现它. c#中有等效的 或者如果没有,我该如何以其他方式实现? 解决方案 我遵循了帕斯卡·库克(Pascal Cuoq)的建议,并创建了一个非常简单的 - 一个功能组件. 如果其他人会遇到这样的问题,我将其发布在这里. 使用我的lib的解决方案: 下载dll文件从:/roundmodeutil.dll 添加对项目中图书馆的引用. 包括使用圆形摩擦器;项目代码中的行. 用法: static void RoundModeConfig::setround( int mode ); // mode can be set to one of the following values: static int RoundModeConfig::UPWARD static int RoundModeConfig::DOWNWARD s
8 2024-04-23
编程技术问答社区
浮点数/双数/十进制中的精确数字是什么意思?
在 float的精度为6至9位数字 double的精度为15至17位数字 decimal的精度为28至29位数字 precision在这种情况下含义是什么,尤其是precision如何成为一个范围?由于固定了指数和mantsa的位数,precision如何变量(在所述范围内)?有人可以为例如A float,precision为6,一个precision为9? 解决方案 浮动和双 (我要解释float,那就是是相同但数字更大的. 通常,您可以想象一个float是: mantissa₂ *(2 ^exponent₂) 其中mantissa₂表示底座中的mantissa,而指数则表示底座中的指数 Mantissa₂是23位,指数₂8位.该标志有一个额外的位置,而exponent₂具有特殊的格式,具有特殊的范围,我们将在下面看到很多 还有另一个技巧:浮点通常以"归一化"形式保存: 1₂Mantissa₂ *(2 ^exponent₂)
4 2024-04-23
编程技术问答社区
Npgsql。不支持时间戳的旧浮点表示法
我已经编写了一个基本脚本,该脚本将来自PostgreSQL数据库的数据同步到另一个系统,该系统在我的测试/开发环境中执行,而没有问题: PostgreSQL 9.4 NPGSQL DLL版本3.0.3 一旦我们在实时生产环境中运行脚本,我们就会达到以下错误: "不支持时间戳的旧浮点表示" 在研究问题时,我发现这与" PostgreSQL的不弃用时间"选项有关,该选项切换到某些日期/时间字段的浮点数表示.NPGSQL(当前)不支持此模式. 这是指向相关源代码的链接. 在生产中,PostgreSQL Server正在运行8.3版,由于内部原因,服务器管理器此时已拒绝升级PostgreSQL Server. (当前的NPGSQL版本在版本9之前不正式支持Posgresql.doh!) 问题: 是否有任何方法可以修改postgresql 8.3" integer_datetimes" 配置设置而无需完全重新安装应用程序或 升级? 另外,有什么方法可
4 2024-04-23
编程技术问答社区
在C#中避免数字格式化中的额外0
(首先:这不是格式数字的我正在使用dodald的解决方案(用浮点和符号格式化数字,以使它们根据浮点进行对齐: textbox1.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number1); textbox2.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number2); textbox3.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number3); textbox4.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number4); textbox5.Text = String.Format("{0:+;-}{0,9:0.00000;0.00000}", number5); 它适用于数字,就像-1.23456(结果为" -1.2345
8 2024-04-23
编程技术问答社区
System.Convert.ToSingle()问题,(1.5)对(1,5)。
我正在用C#编写程序,用于在模型格式之间进行转换. 模型格式的数字为文本,例如" -0.136222". 我可以使用System.Convert.ToseLe()将其转换为浮点数.但是在德国,我们将逗号用作小数点(-0,136222),并使用System.convert对此进行拾取.现在,我有一个问题,因为它预计会逗号,所以我没有识别小数点. 简而言之; 我们有一个:" -0.136222" 我们明白了:-0136222.0f 因为它期望这样:" -0,136222" 我可以告诉系统将逗号识别为仅适合我的程序的小数点吗?由于需要便携(对其他国家),因此无法正常工作. 解决方案 使用single.parse(),如下: Single.Parse("-0.136222", CultureInfo.InvariantCulture); 不变文化是告诉解析字符串的方法的方式 其他解决方案 将其视为.在客户端计算机上安装的.NET框架将自动选择选择正确的方法
2 2024-04-23
编程技术问答社区
如何减去由字符串派生的两个浮点数
浮点数来自输出字符串.这是我的示例代码: #!/bin/bash output="0.15 0.11" cputime=${output[0]} gputime=${output[1]} echo $cputime $gputime diff=`echo "$cputime - $gputime" | bc` echo $diff 解决方案 您的代码以分离值可以更好地编写: #!/bin/bash output="0.15 0.11" cputime=${output%% *} gputime=${output##* } diff=$(echo "$cputime - $gputime" | bc) echo $diff ##和%%分别是removal-of-longest-prefix和removal-of-longest-suffix运算符,删除从第一个空间(*)或所有内容到最后一个空间(*
10 2024-04-22
编程技术问答社区
在不改变目标类型的情况下,以最大的精度序列化浮点数
我需要对原始二进制数据(二进制形式)进行序列化,然后序列化为JSON(用于编辑),然后再次将其序列化为二进制. 显然,我在花车上输了.原始浮点值0xF9FF4FC1(大端,大致 -12.9999933 )被舍入到0xF6FF4FC1>( -12.999999 )时>(在内存中,正确的数据和中间数据为1:1)至 JSON .我知道这不是很大的损失,我知道浮子是有问题的,但是由于以后可能的不兼容问题,我想尽可能地保持精确度. 在JSON之前有人解决了这个问题吗?我如何强迫它以最大精度编写浮动?我已经尝试在将浮子处理为小数或双倍的选择中,但不幸的是,我无法更改目标值,因为我无法更改目标值,因为当我进行二进制序列化时,它们仍然需要将其写成浮点无论在隐式转换过程中. 我试图往返的特定类型是Vector2 Vector2来自 https://github.com/fna-xna/fna/blob/master/src/src/vector2.cs . tl:dr有一个浮点,希望js
0 2024-04-22
编程技术问答社区
为什么Math.Tan(90)会提供一个非定义值?
在使用Math.Tan()时,我发现90度的结果不是不确定的.但是,Inturn 1.6331779E+16 这是应用程序的屏幕截图 这是代码, // convert to degrees angle = (Convert.ToDouble(op1) * Math.PI / 180); // write the output FinalResult.Text = Math.Tan(Convert.ToDouble(angle)).ToString(); 为什么这样的行为是期望的? 解决方案 计算是用并不完美的浮点数完成的(不是Math.PI可以完美地表示为十进制). ,更具体地.. 如果您想要一个圆形的结果,请检查输入是否>89.9999 &&
0 2024-04-22
编程技术问答社区
如何在c#中检查数字是否可分?
我需要知道如何执行此过程. calculation1: 1/4 = 0,25 calculation2: 1/8 = 0,125 calculation3: 47/183 = 0,25683060109289617486338797814207...... calculation4: 58/889 = 0,06524184476940382452193475815523...... calculation5: 1/5 = 0,2 计算1、2和5的结果将给出一个短的结果,没有周期或无尽的数字字符串.计算3和4的结果非常长且复杂. 我如何检查哪个计算是"简单的",并给出"简短"结果. 我尝试了一下,这肯定给了一个错误的结果... 就像您看到的那样,计算结果在我的应用程序中具有datatype double. static bool IsInt(double x) { try { int y = Int
20 2024-04-22
编程技术问答社区
为什么单Epsilon值是1.401298E-45
我不明白为什么单个epsilon值为1.401298E-45而不是1E-126,如果内部的指数为-126,而mantsa为1. . 解决方案 最小的正Single值的指数为-126,基础为两个,二元显着为.0000000000000000000000001(2 -23 ),因此其值为2 −149 ,大约为1.4•10 −45 . 其他解决方案 请记住,IEEE-754单精度浮子存储在基本2个代理中.这就是如何制定单精制的最小可能的否定值: 3 2 1 0 1 09876543 21098765432109876543210 S ---E8--- ----------F23---------- Binary: 0 00000000 00000000000000000000001 He
0 2024-04-22
编程技术问答社区