我怎么能转换String,如"12.34"一个double在Java中?
我必须计算一些浮点变量,我的同事建议我使用BigDecimal而不是double因为它会更精确.但我想知道它是什么以及如何最大限度地利用它BigDecimal?
我可以说使用double(或float)代替以下三个优点decimal:
但这些优势似乎只适用于计算密集型操作,例如建模软件中的操作.当然,在需要精确度时,不应使用双精度数,例如财务计算.那么有没有任何实际的理由选择double(或float)而不是decimal"正常"的应用程序?
编辑补充:感谢所有伟大的回应,我向他们学习.
还有一个问题:一些人认为双打可以更精确地代表实数.宣布时,我认为他们通常也会更准确地代表他们.但是,当执行浮点运算时,准确度是否会降低(有时是显着的)是真实的说法吗?
我想在c#中将两位小数值加倍,我怎么能这样做?
double inputValue = 48.485;
Run Code Online (Sandbox Code Playgroud)
结束后
inputValue = 48.49;
Run Code Online (Sandbox Code Playgroud)
我想解析"3.5"一个双字符串的字符串.然而,
double.Parse("3.5")
Run Code Online (Sandbox Code Playgroud)
收益35和
double.Parse("3.5", System.Globalization.NumberStyles.AllowDecimalPoint)
Run Code Online (Sandbox Code Playgroud)
抛出一个FormatException.
现在我的计算机的语言环境设置为德语,其中逗号用作小数分隔符.它可能需要做些什么并double.Parse()期待"3,5"作为输入,但我不确定.
如何解析包含十进制数的字符串,该十进制数可能是也可能不是我当前语言环境中指定的格式?
浮点数据类型是单精度32位IEEE 754浮点数,双数据类型是双精度64位IEEE 754浮点数.
这是什么意思?什么时候应该使用float而不是double,反之亦然?
今天,我正在查看一些C++代码(由其他人编写)并找到了这一部分:
double someValue = ...
if (someValue < std::numeric_limits<double>::epsilon() &&
someValue > -std::numeric_limits<double>::epsilon()) {
someValue = 0.0;
}
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚这是否有意义.
文档epsilon()说:
该函数返回1和大于1的最小值之间的差值,可以表示[乘双].
这是否也适用于0,即epsilon()最大值是否大于0?或者有没有之间的数字0,并0 + epsilon可以由代表double?
如果没有,那么比较不等于someValue == 0.0?
什么是最大的"非浮动"整数,可以存储在IEEE 754 double类型而不会丢失精度?
我想在没有指数形式的Java中打印double值.
double dexp = 12345678;
System.out.println("dexp: "+dexp);
Run Code Online (Sandbox Code Playgroud)
它显示了这个E符号:1.2345678E7.
我希望它像这样打印: 12345678
防止这种情况的最佳方法是什么?
最近我不得不将双序列化为文本,然后将其取回.该值似乎不相等:
double d1 = 0.84551240822557006;
string s = d1.ToString("R");
double d2 = double.Parse(s);
bool s1 = d1 == d2;
// -> s1 is False
Run Code Online (Sandbox Code Playgroud)
但根据MSDN:标准数字格式字符串,"R"选项应该保证往返安全.
往返("R")格式说明符用于确保转换为字符串的数值将被解析回相同的数值
为什么会这样?