是什么区别decimal,float并double在.NET?
什么时候会有人使用其中一种?
我一直看到人们在C#中使用双打.我知道我读到某个地方,双打有时会失去精确度.我的问题是什么时候应该使用双倍,何时应该使用小数类型?哪种类型适合货币计算?(即超过1亿美元)
我想使用轨迹栏来改变窗体的不透明度.
这是我的代码:
decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;
Run Code Online (Sandbox Code Playgroud)
当我构建应用程序时,它会出现以下错误:
无法隐式转换
decimal为double.
我尝试使用trans,double但然后控件不起作用.这段代码在过去的VB.NET项目中运行良好.
在以下程序中,您可以看到每个值略小于.5向下舍入,除了0.5.
for (int i = 10; i >= 0; i--) {
long l = Double.doubleToLongBits(i + 0.5);
double x;
do {
x = Double.longBitsToDouble(l);
System.out.println(x + " rounded is " + Math.round(x));
l--;
} while (Math.round(x) > i);
}
Run Code Online (Sandbox Code Playgroud)
版画
10.5 rounded is 11
10.499999999999998 rounded is 10
9.5 rounded is 10
9.499999999999998 rounded is 9
8.5 rounded is 9
8.499999999999998 rounded is 8
7.5 rounded is 8
7.499999999999999 rounded is 7
6.5 rounded is 7 …Run Code Online (Sandbox Code Playgroud) 64位双精度可以精确地表示整数+/- 2 53
鉴于这一事实,我选择将double类型用作所有类型的单一类型,因为我的最大整数是无符号32位.
但现在我必须打印这些伪整数,但问题是它们也与实际双打混合在一起.
那么如何在Java中很好地打印这些双打?
我试过了String.format("%f", value),这很接近,除了我得到很多小值的尾随零.
这是一个示例输出 %f
232.00000000 0.18000000000 1237875192.0 4.5800000000 0.00000000 1.23450000
我想要的是:
232 0.18 1237875192 4.58 0 1.2345
当然,我可以编写一个函数来修剪这些零,但由于字符串操作,这会导致很多性能损失.我可以用其他格式代码做得更好吗?
编辑
Tom E.和Jeremy S.的答案是不可接受的,因为它们都可以任意舍入到小数点后两位.请在回答之前先了解问题.
编辑2
请注意,String.format(format, args...)是区域设置相关的(见下面的答案).
doubleprintf中正确的格式说明符是什么?是它%f还是它%lf?我相信它%f,但我不确定.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
Run Code Online (Sandbox Code Playgroud) 谁能告诉我如何在Swift中将double值舍入到x个小数位?
我有:
var totalWorkTimeInHours = (totalWorkTime/60/60)
Run Code Online (Sandbox Code Playgroud)
与totalWorkTime在第二个是NSTimeInterval(双).
totalWorkTimeInHours 会给我时间,但它给了我这么长的精确数字的时间,例如1.543240952039 ......
当我打印时,如何将其舍入到1.543 totalWorkTimeInHours?