Tag: C#的

如何在C中表示货币或金钱

TL; DR 1在C中表示货币或货币的准确和可维护的方法是什么? 问题背景: 这已经被许多其他语言所回答,但我找不到C语言的可靠答案。 C# 应该用什么数据types来代表C#中的钱? Java 为什么不使用Double或Float来表示货币? Objective-C 如何在Objective-C / iOS中表示金钱? 注意:对于其他语言,还有很多类似的问题,我只是为了表示的目的而拉了一些。 所有这些问题可以被提炼成“使用decimal数据types”,其中具体types可以根据语言而变化。 有一个相关的问题最终提出使用“固定点”方法,但是没有一个答案在C中使用特定的数据types。 同样,我也研究过任意精度的库,比如GMP ,但是我不清楚这是否是最好的方法。 简化假设: 假定基于x86或x64的体系结构,但请提出任何会影响基于RISC的体系结构(如Power芯片或Arm芯片)的假设。 计算的准确性是主要的要求。 易于维护将是下一个要求。 计算速度是重要的,但是对其他要求来说是高等的。 计算需要能够安全地支持对工厂的准确操作,并支持高达数万亿的值(10 ^ 9) 与其他问题的区别: 如上所述,这种types的问题之前已经被问及多种其他语言。 这个问题与其他问题有几个不同的原因。 使用接受的答案: 为什么不使用Double或Float来表示货币? ,让我们强调一下差异。 ( 解决scheme1 )以几乎任何语言工作的解决scheme是使用整数,并计数分。 例如,1025将是10.25美元。 几种语言也有内置的types来处理金钱。 ( 解决scheme2 )其中,Java有BigDecimal类,C#有十进制types。 重点强调了两个build议的解决scheme 第一个解决scheme本质上是“固定点”方法的变体。 这个解决scheme存在一个问题,build议的范围(跟踪分)不足以进行基于工厂的计算,并且舍入时会丢失重要的信息。 另一种解决scheme是使用C中不可用的本地decimal类。 同样,答案不考虑其他选项,例如创build一个用于处理这些计算的结构或使用任意精度库。 这些都是可以理解的差异,因为Java没有结构,为什么在语言中有本地支持的情况下考虑使用第三方库。 这个问题不同于这个问题和其他相关的问题,因为C没有相同的本机types支持级别,并且具有其他语言不支持的语言function。 而且我还没有看到任何其他的问题可以解决C中可以用到的多种方法。 问题: 从我的研究来看,由于浮点错误, float似乎不是一个用于在C程序中表示货币的合适的数据types。 C应该用什么来代表金钱,为什么这种方法比其他方法更好呢? 1 这个问题起源较短,但收到的反馈意见表明有必要澄清这个问题。

如何在wpf背景中执行任务,同时能够提供报告并允许取消?

我想在点击一个wpfbutton后执行一个长时间运行的任务。 在这里,我做了什么。 private void Start(object sender, RoutedEventArgs e) { for (int i = 0; i < 10; i++) { Thread.Sleep(2000); // simulate task } } 问题是,这将使wpf gui无响应。 我也想每隔1秒允许取消和报告进度。 我展开下面的代码。 DispatcherTimer dispatcherTimer = new DispatcherTimer(); // get progress every second private int progress = 0; // for progress reporting private bool isCancelled = false; // cancellation […]

ConfigurationManager不保存设置

这是我正在使用的代码: private void SaveConfiguration() { if (txtUsername.Text != "" && txtPassword.Text != "") { ConfigurationManager.AppSettings["Username"] = txtUsername.Text; ConfigurationManager.AppSettings["Password"] = txtPassword.Text; MessageBox.Show("Su configuracion guardo exitosamente.", "Exito!"); this.Close(); } else { MessageBox.Show("Por favor lleno los campos.", "Error."); } } 现在,这些设置是持久的,但是当我closures应用程序并按F5再次运行时,这些值将被还原为input到app.config文件中的内容。 有什么build议么?

c ++与结构sorting

这个问题需要一些客户姓名,客户ID,最后到期的金额。 我有整个计划,但无法弄清楚最后一个需要做分类的原型。 我有一个名为Customers的结构,我也将提供int main()部分。 我只需要在SortData()的原型上开始GT的任何帮助。 struct Customers { string Name; string Id; float OrderAmount; float Tax; float AmountDue; }; const int MAX_CUSTOMERS = 1000; bool MoreCustomers(int); Customers GetCustomerData(); void OutputResults(Customers [], int); void SortData(const int, const int, Customers []); int main() { Customers c[MAX_CUSTOMERS]; int Count = 0; do { c[Count++] = GetCustomerData(); } while […]

移动是否使对象处于可用状态?

说我有两个向量,我移动到另一个, v1 = std::move(v2) ; v2还会在这之后处于可用状态吗?

初始化可变长度数组

在初始化变长数组时,编译器给出一个错误信息: [Error] variable-sized object may not be initialized 代码片段: int n; printf("Enter size of magic square: "); scanf("%d",&n); int board[n][n] = {0}; 变长数组应如何初始化? 为什么所有的元素都没有按照下面的方式初始化为0 ; int board[n][n]; board[n][n] = {0}; ?

C ++重载静态函数与非静态函数

我想打印两个不同的东西,取决于是否用Foo::print()静态调用函数或从Foo foo; foo.print();的实例中调用函数Foo foo; foo.print(); Foo foo; foo.print(); 编辑:这是一个类定义,绝对不能正常工作,已经有几个人回答了。 class Foo { string bla; Foo() { bla = "nonstatic"; } void print() { cout << bla << endl; } static void print() { cout << "static" << endl; } }; 但是,有没有一个很好的方法来达到这个效果呢? 基本上我想这样做: if(this is a static call) do one thing else do another thing 换句话说,我知道PHP可以检查*thisvariables是否被定义,以确定函数是否被静态调用。 […]

Json.Net – 将字典序列化为数组(键值对)

Json.Net通常将Dictionary<k,v>序列化为一个集合; "MyDict": { "Apples": { "Taste": 1341181398, "Title": "Granny Smith", }, "Oranges": { "Taste": 9999999999, "Title": "Coxes Pippin", }, } 这是伟大的。 而从环顾四周,这似乎是大多数人想要的。 然而,在这种特殊情况下,我想序列化我的Dictionary<k,v>和Array格式。 "MyDict": [ "k": "Apples", "v": { "Taste": 1341181398, "Title": "Granny Smith", } }, "k:": "Oranges", "v:": { "Taste": 9999999999, "Title": "Coxes Pippin", } }, ] 有一个简单的方法来做到这一点与我现有的字段types? 是否有一个我可以注释的属性?

C#中的静态类初始化的顺序是确定性的吗?

我做了一些search,我认为下面的代码是保证产生输出: BX = 7 BX = 0 AX = 1 A = 1,B = 0 static class B { public static int X = 7; static B() { Console.WriteLine("BX = " + X); X = AX; Console.WriteLine("BX = " + X); } } static class A { public static int X = BX + 1; […]

链接c代码到c ++代码时,g ++链接顺序依赖关系

在今天之前,我一直认为在连接阶段把对象和库传给g ++的顺序是不重要的。 然后,今天,我试图从c ++代码链接到c代码。 我将所有的C头文件封装在一个extern“C”块中,但是链接器仍然有困难find我知道在C对象存档中的符号。 困惑,我创build了一个相对简单的例子来隔离链接错误,但令我惊讶的是,更简单的例子没有任何问题。 经过一些试验和错误之后,我发现通过模拟简单例子中使用的链接模式,我可以得到主代码链接OK。 该模式是目标代码第一,对象档案第二例如: g++ -o serverCpp serverCpp.o algoC.o libcrypto.a 任何人都可以阐明为什么这可能是这样的? 链接普通的c ++代码时,我从来没有见过这个问题。