我可以说使用double(或float)代替以下三个优点decimal:
但这些优势似乎只适用于计算密集型操作,例如建模软件中的操作.当然,在需要精确度时,不应使用双精度数,例如财务计算.那么有没有任何实际的理由选择double(或float)而不是decimal"正常"的应用程序?
编辑补充:感谢所有伟大的回应,我向他们学习.
还有一个问题:一些人认为双打可以更精确地代表实数.宣布时,我认为他们通常也会更准确地代表他们.但是,当执行浮点运算时,准确度是否会降低(有时是显着的)是真实的说法吗?
我总是在c#中告诉double类型的变量不适合赚钱.所有奇怪的事情都可能发生.但我似乎无法创建一个示例来演示其中的一些问题.谁能提供这样的例子?
(编辑;这篇文章最初被标记为C#;一些回复指的是具体细节decimal,因此意味着System.Decimal).
(编辑2:我特别要求一些c#代码,所以我不认为这只是语言不可知)
当我在C#中进行分割时,它会自动向下舍入.看这个例子:
double i;
i = 200 / 3;
Messagebox.Show(i.ToString());
Run Code Online (Sandbox Code Playgroud)
这显示了一个包含"66"的消息框.然而,200/3实际上是66.66666.
有没有办法可以避免这种四舍五入并保持像66.6666667这样的数字?
我有以下int 7122960
我需要将其转换为71229.60
关于如何将int转换为小数并将小数点插入正确位置的任何想法?
注解:
/**
* @ORM\Column(type="float", scale="2")
*/
protected $curr_price;
Run Code Online (Sandbox Code Playgroud)
我正在使用它与Symfony 2.
并且此字段在MySQL数据库中变为双精度而不是具有2点精度的浮点数.
我究竟做错了什么?我尝试删除数据库,重新插入等...
可能重复:
十进制vs双! - 我应该使用哪一个?何时使用?
我double在我的交易软件中使用价格类型.我注意到有时会出现奇怪的错误.如果价格在"点"之后包含4位数,则会出现,如2.1234.
当我从我的程序"2.1234"发送市场订单出现在"2.1235"的价格.
我不使用,decimal因为我不需要"极端"精度.我不需要将"2.00000000003"与"2.00000000002"区分开来.我需要一个点后最多6位数.
问题是 - 线路在哪里?什么时候用decimal?
我应该decimal用于任何金融业务吗?即使我只需要点后一位数字?(1.1 1.2等)
我知道decimal很慢,所以double除非decimal绝对需要,否则我更愿意使用.
string[] strArray = new string[10] { "21.65", "30.90", "20.42", "10.00", "14.87", "72.19", "36.00", "45.11", "18.66", "22.22" };
float temp = 0.0f;
Int32 resConvert = 0;
Int32 resCast = 0;
for (int i = 0; i < strArray.Length; i++)
{
float.TryParse(strArray[i], out temp);
resConvert = Convert.ToInt32(temp * 100);
resCast = (Int32)(temp * 100);
Console.WriteLine("Convert: " + resConvert + " ExplCast: " + resCast);
}
Run Code Online (Sandbox Code Playgroud)
答案:
Convert: 2165 ExplCast: 2164 // ??
Convert: 3090 ExplCast: 3089 // ??
Convert: 2042 ExplCast: 2042 …Run Code Online (Sandbox Code Playgroud) 我需要比较两个值.一个值price代表某物的当前价格,因此decimal您实际上可以按此价格买入或卖出某物.
另一个值是estimatedPrice数学计算的结果,double因为它只是estimation,你实际上不能做任何"操作"esitmatedPrice
现在我想买price < estimatedPrice.
那么我应该将价格加倍或估计价格为十进制吗?
我明白在投射后我会得到"轻微的另一个"数字,但似乎我没有其他选择.
这是我不理解的代码的一部分:
byte b1 = (byte)(64 / 0.8f); // b1 is 79
int b2 = (int)(64 / 0.8f); // b2 is 79
float fl = (64 / 0.8f); // fl is 80
Run Code Online (Sandbox Code Playgroud)
为什么前两个计算一个一个?我应该如何执行此操作,所以它快速而正确?
编辑:我需要字节结果
在C#中,我有一个双变量价格,价值10215.24.我想在一些数字后用逗号显示价格.我的预期产量是10,215.24