Tag: 十进制

从`NSDecimal`或`NSDecimalNumber`转换为C#的`decimal`类型

我从StoreKit的SKProduct类得到了一个NSDecimalNumber ,我想将它转换为C#的decimal类型,以最大限度地减少精度损失。 有没有直接的方法来做这样的事情? 我认为我的两个选择是: 假设我理解每个的二进制实现并执行我自己的逐位转换,或者 让NSDecimalNumber给我一个字符串,然后有decimal解析它。 我认为选项1是太多的工作,甚至可能是脆弱的,所以我倾向于使用选项2.但这似乎不是我能做的最好的。 (我可以忍受它的速度有多慢,因为它极少发生。

十进制c的自定义格式

我正在尝试将带小数的十进制值格式化为没有逗号或点的自定义格式,检查http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx但找不到我需要的格式 我需要将例如3​​.1416的十进制值转换为314甚至更好的0000000314,任何线索?

尝试计算框的分数时的十进制精度损失

我有一个场景,我有一个包含3jar的标准盒子。 出于显示和查询的目的,我必须根据其标准配置的十进制数量进行报告。 不可能说1盒3jar,1盒2jar……等等 例如,最初我将有1盒3jar 然后我删除1可以产生0.66重复的3jarjar 然后我再删除1 个jar子,产生0.33个重复的3个jar子 然后我删除最终可以导致0.0000000000000000000000000001盒3jar 当我删除最终的jar头时,我希望该值为0盒3jar,因为现在每个jar子都已从原始盒子中移除。 我很欣赏由于在处理有限数量的位时无法表示0.33重复这一事实而导致精度损失。 问题:对于那些需要使用舍入(可能是财务)的系统有更多经验的人,我有哪些选择来处理这个问题? 如何删除最后一个可能意味着该框不再存在? 编辑: 到底。 我使用了Loren Pechtel的建议并存储了jar头的数量,然后当我需要显示多少标准盒子时我将jar头总数除以标准盒子中的jar头数量仍然给出递归结果但这对报告来说很好事情的一面。 以下是一些代码,我希望这些代码可以帮助更多地概述问题: – static void Main(string[] args) { var box = new StandardBox(3); var boxDetail = new BoxDetail(1.0m, box); var allBoxes = new AllBoxes(); allBoxes.AddBox(boxDetail); allBoxes.RemoveItemFromBox(boxDetail, 1.0m); Console.WriteLine(allBoxes); allBoxes.RemoveItemFromBox(boxDetail, 1.0m); Console.WriteLine(allBoxes); allBoxes.RemoveItemFromBox(boxDetail, 1.0m); Console.WriteLine(allBoxes); Console.ReadLine(); } } public class StandardBox […]

C#decimal,如何添加尾随零

我必须将尾随零添加到十进制值。 不仅用于显示(因此Format不是一个选项),而是在实际的底层数据中,因为小数精度在我们的应用程序中很重要。 我试过了: decimal value = 1M decimal withPrecision = value + 0.000M; 在许多情况下哪种方法效果很好……奇怪的是并非如此。 我调试了一个情况,其中withPrecision中的值仍然是1M,没有看到运行时的值和立即窗口中相同的硬编码值有任何差异。 我还使用decimal.GetBits来找到差异 – 没有。 我试过(这里提出调整小数精度,.net ): decimal value = 1M decimal withPrecision = value * 1.000M; 效果很好 – 除了案例值为零。 然后结果为0M,没有任何尾随零。 我也不相信解决方案,在其他情况下也可能不起作用。 目前我在: decimal value = 1M decimal withPrecision = (value * 1.000M) + 0.000M; 哪个适用于我目前发现的所有情况……但看起来也不值得信赖。 我也可以为零实现一个例外情况。 我认为Format和Parse会起作用。 我不喜欢它。 它看起来不是很快,我不明白为什么我必须将小数字放入一个字符串只是为了操纵它。 我开始相信这样一个简单的任务没有干净的解决方案。

在C#中需要任意精度算术

我需要C#的浮点计算,可以正确存储可能500位/小数。 有没有内置类型,我是否必须自己创建,任何可用的库或最好的方法是什么? 谢谢

在十进制值上执行Math.Round(x,2),但需要确保小数点后的2个数字作为其金额

有些值返回2.0,但我需要它为2.00,因为这是显示在网页上的金钱值。 我在做: Math.Round(value, 2); 有没有办法强制它在小数点后的2个数字?

如何在C#程序中获取小数到n位精度为Pi

注册到这个问题Pi in C# 我编写了下面的代码并给出了最后6位数为0的输出。所以我想通过将所有内容转换为十进制来改进程序。 我从来没有在C#中使用过十进制而不是之前的双倍,而我在常规使用中只能使用double。 所以请帮助我进行十进制转换,我试图在开始时将所有双倍替换为十进制并且它没有变好:(。 using System; class Program { static void Main() { Console.WriteLine(” Get PI from methods shown here”); double d = PI(); Console.WriteLine(“{0:N20}”, d); Console.WriteLine(” Get PI from the .NET Math class constant”); double d2 = Math.PI; Console.WriteLine(“{0:N20}”, d2); } static double PI() { // Returns PI return 2 * F(1); […]

比较两位小数

我想比较c#中的两个小数,但有一些误差。 任何人都可以指出以下代码的问题。 请注意,我对6个小数位感兴趣,之后我可以忽略这些值。 var valOne = decimal.Round(valueOne, 6); var valTwo = decimal.Round(valueTwo, 6); var difference = Math.Abs(valOne – valTwo); if (difference > 0.0000001m) { Console.WriteLine(“Values are different”); } else { Console.WriteLine(“Values are equal”); } 或者,还有更好的方法。

一种在C#中编写大数字文字的方法

我有这样的方法: Prefix GetPrefix(decimal value) { if(value > 11000000000000000000) return Prefix.CosmicBig; if(value > 1000000000000000) return Prefix.ReallyBig; if(value > 3000000000000) return Prefix.Big; if(value > 50000000) return Prefix.Okay; if(value > 750000) return Prefix.MostlyNormal; if(value > 750000) return Prefix.SoSo; if(value > 750) return Prefix.Small; return Prefix.MiserablySmall; } 确切的值并不重要。 重要的是它们有时会被更改(前缀用于绘图,一些文本区域在开发中会改变大小)。 我正在寻找一种以一种方式来编写这些文字的方法,这种方式很容易被人类改变它,而不必计算所有的零。 分隔符会很好。 我想写11 * 1000 * 1000 * 1000 * […]

c#:两个双数字的总和问题

可能重复: 为什么C#中的浮点运算不精确? 你好。 我有以下问题: 43.65+61.11=104.75999999999999 对于十进制是正确的: (decimal)43.65+(decimal)61.11=104.76 为什么双重结果是错误的?