Tag: 十进制

c#误解中的小数?

(在尝试分析decimal如何工作时)&&阅读@jonskeet文章并看到msdn ,并思考过去4个小时后,我有一些问题: 在这个链接中他们说的很简单: 1.5 x 10^2有2有效数据 1.50 x 10^2有3有效数字。 1.500 x 10^2有4有效数字等… 好的……我们明白了。 来自jon的文章: sign * mantissa / 10^exponent 像往常一样,符号只是一个位,但有96位尾数和5位指数 ^ _ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^___ ^^^^^ 1 _ 96 5 好 所以max mantiss val = 2^96-1 = 79228162514264337593543950335这是: 7.9228162514264*10^28 (根据我的iphone …无法在windows calc中看到指数表示。) 注意 : 7.9228162514264*10^28有14位有效数字(根据上面的例子) 现在指数为5位的部分是无关紧要的,因为它在分母中 – 所以我需要最小值为2 ^ 0 问题#1: msdn说: 28-29 significant digits 但根据我的样本( 1.500 […]

将Decimal数组转换为Double数组

什么是将decimal[]转换为double[]的有效且有希望优雅的咒语? 我正在使用一些相当大的数组。

C#类型后缀为十进制

我不知道我正在努力实现的正确措辞是什么,所以它可能已经在网上发布。 如果是,请善待。 好吧基本上我有这个方法。 public static T IsNull(IDataReader dr, String name, T nullValue) { return Helpers.IsNull(dr, dr.GetOrdinal(name), nullValue); } public static T IsNull(IDataReader dr, Int32 index, T nullValue) { if (dr.IsDBNull(index)) { return nullValue; } else { return (T)dr.GetValue(index); } } 被称为Helpers.IsNull(dr, “UnitWholeSale”, 0d) ,我得到的错误是“无法从double转换为十进制”。 现在我知道我可以使用decimal.Zero但有一些方法我可以简单地去0dec或类似的东西吗? 我只是讨厌那些冗长的快捷方式值(特别是在调用带有20个参数的构造函数时)。

双精度值无法正确表示哪些值

Double数据类型无法正确表示某些基数10的值。 这是因为浮点数代表实数。 这意味着当表示货币值时,应该使用十进制值类型来防止错误。 (随意更正此序言中的错误) 我想知道的是,在标准.Net框架下64位架构下的双数据类型下出现这样一个问题的值是什么(C#如果有所不同)? 我希望答案是一个公式或规则来找到这样的值,但我也想要一些示例值。

在C#中将二进制转换为十进制的程序?

我想创建一个基本程序,使我能够将二进制数转换为十进制数,但几乎无处不在互联网上,我只是无法找到一个有效的解决方案! 我似乎无法遵循解决方案,到目前为止我已经开发了一些代码,但不确定它是否正确,有什么帮助吗? 谢谢 int iBinaryNum; //To store binary number string sDecimalNum; //To store decimal numbers Console.WriteLine(“Enter the binary number you want to convert to decimal”); iBinaryNum = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(“The Binary number you have entered is ” + iBinaryNum); sDecimalNum = Convert.ToString(iBinaryNum, 2); Console.WriteLine(“This converted into decimal is ” + sDecimalNum); //Prevent program from closing Console.WriteLine(“Press […]

OleDB读取Excel十进制值

我使用OleDB Ace 12来读取包含带小数值的列的Excel(xslx)表。 当我在PC上打开Excel工作表时,十进制值的格式正确为1.850,50 (使用逗号作为小数分隔符的NLD文化) 当我使用OleDB(C#4.0)读出Excel表格时,该字段的字符串值始终为1,850.50 (美国格式) 我已经尝试设置我填充的DataSet的Locale,设置currentthread的文化等等,但是填充了OleDB适配器的DataSet总是返回US格式的小数。 我可以在阅读时更改格式化值的方式吗? 或者无论如何它总是美国格式?

.NET十进制跨平台标准

如果我使用二进制编写器将C#十进制数组保存到二进制blob,我是否能够在Java或Python或R中无缝读取此blob? 这些语言是否具有相应的数据类型,或者是否存在.NET十进制所遵循的跨平台标准? 我在存储之前将所有数值数据转换为小数,因为当一个小数组数组被扩散然后压缩时,生成的blob大小比任何算法压缩的浮点blob小得多(我的测试显示c.2x)更小的空间)。 并且小数在变差时不会失去精确度。 但我不确定我是否可以从.NET以外的任何其他语言中读取这些blob。 我正在阅读维基页面,但我自己无法回答这个简单的问题。 更新: 目前我对decimal[]数组进行了不安全的引用并将其转换为(byte* )指针,但这相当于二进制writer。 问题是关于跨平台十进制互操作,而不是序列化。 在第一个答案中查看我的评论。

使用至少2个位置和最多6个位置格式化小数

为了满足规范,我需要使用规则格式化十进制值: 所有值必须至少有两位小数,最多六位 。 例: Value Formatted 1 1.00 1.1 1.10 1.1234 1.1234 1.123456 1.123456 1.12345678 1.123456 我想我会结束使用一个条件,但我想知道是否有一个格式字符串可以做到这一点。

在c#中将base-27(或base-X)转换为base-10?

是否有现成的function可以在c#中进行基本转换? 我希望从基数为26和基数为27的数字转换为基数10.我可以在纸上做,但我不是一个非常有经验的程序员,如果可能的话,宁可不要从头做。 谢谢!

将(长尾数)和(sbyte指数)转换为十进制

upd将我的版本放在最后的描述中 我需要将尾数和指数转换为十进制。 这就是我编码的方式: // long field.Decimal.Mantissa // sbyte field.Decimal.Exponent decimal MDEntryPx = field.Decimal.Mantissa * (decimal)(Math.Pow(10, field.Decimal.Exponent)); field.Decimal.Mantissa是整数,但Math.Pow(10, field.Decimal.Exponent)是double,所以我担心在转换为十进制时我会丢失精度。 我应该为产生decimal integer类型编写自己的Pow函数吗? 你会建议什么? 我关心性能,因为我称这个函数每秒数十万次! 如此丑陋但快速的解决方案非常需要! 而且我关心精确度,因为我在这里工作。 这就是我刚刚编写的内容,但可能有人可以提出更好的建议: class Util { private static readonly decimal[] posPow10 = { 1M, 10M, 100M, 1000M, 10000M, 100000M, 1000000M, 10000000M, 100000000M, 1000000000M, 10000000000M, 100000000000M }; private static readonly decimal[] negPow10 = { […]