- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
NumberFormat/DecimalFormat 似乎无法将具有 "#.0"
格式(其中 # 是任意数字)的字符串解析为 double 字符串。以下代码说明了这一点:
#include <cstdio>
#include <iostream>
#include <unicode/decimfmt.h>
#include <unicode/numfmt.h>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
int main() {
UErrorCode status = U_ZERO_ERROR;
// DecimalFormat doesn't work either
NumberFormat* f = NumberFormat::createInstance(status);
f->setGroupingUsed(false);
f->setParseIntegerOnly(false);
UnicodeString str("2.0"); // Change to "2.#" for it to work, where # is any non-zero number
Formattable formattable;
f->parse(str, formattable, status);
if (U_FAILURE(status)) {
printf("ERROR: %s\n", u_errorName(status));
delete f;
return 1;
} else {
if (formattable.getType() == Formattable::kDouble) {
printf("kDouble: %f\n", formattable.getDouble());
} else if ((formattable.getType() == Formattable::kLong)) {
printf("kLong: %d\n", formattable.getLong());
} else {
printf("ERROR: unexpected type: %d\n", formattable.getType());
}
}
str.remove(); // Clear the string
f->format(2.0f, str);
std::cout << "formatted: \"" << str << '\"' << std::endl; // Outputs "2"
delete f;
return 0;
}
当解析"2.0"
时,Formattable的类型是2(Formattable::Type::kLong
)。解析 "2.1"
时,Formattable 的类型为 1 (Formattable:Type::kDouble
) - 两个字符串都应如此。
当您尝试将 float 格式化为 UnicodeString 时也会出现问题(例如, float 2.0
被格式化为 "2"
)。
那么:我如何解析/格式化任何 double 而不在 ICU 中将其解释为整数?
最佳答案
您可以调用 formattable.getDouble(status)
- getType 返回 long 的唯一原因是特定值适合 long。
关于格式,如果您在格式之前调用 f->setMinimumFractionDigits(1);
,您的代码将得到“2.0”,将最小数字设置为 2 会得到“2.00”等。
第一个
关于c++ - NumberFormat/DecimalFormat 将某些浮点值视为 long 而不是 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938834/
我有这个代码: public double theInterest(){ return (accountBalance*i) +accountBalance; 我的问题是,有没
我有一个 DecimalFormat ,其模式如下 "#,###.###"但是,当我想输入例如 50.05 时,它不允许这样做,因为每次文本更改以及调用 时,我都会将字符串解析为数字 df.parse
在Java中,我试图让DecimalFormat强制指数符号上的符号。当它是积极的我需要一个加号出现。从我读到的内容来看,这似乎是理所当然的,但对我自己来说,它总是会引发错误。我知道可能还有其他方法可
我在使用 DecimalFormat 时遇到了最奇怪的事情。 我在网络应用程序中使用它。我设置了一些测试,但它在本地一直失败。我的一个 friend 运行了它,他能够成功运行 JUnit 测试。 奇怪
有人知道我在这里做错了什么吗?我有一个 float ,假设它是 0.04。格式化后变成0.03。显然输出结果已经比输入低0.01了。 这是我的代码: float creditAvailableProp
我想使用 DecimalFormat 将 float 格式化为给定的精度。我有的是这个 val formatter = DecimalFormat(if (precision > 0) "#0.${"
我正在为学校编写一个收银机程序,并添加一个“当前价格”标签。到目前为止,一切都很好。我试图使价格显示为 2 位小数,如果没有这种格式,它将显示 10 位以上小数的价格。这是我的代码: double a
我正在尝试为百万位小数的小数格式设置撇号分隔符。我收到格式错误的错误。 String text = ".000'000"; DecimalFormat dformat = new DecimalFor
目前,我在显示格式化小数时遇到问题。在我的本地计算机中,我有一个十进制值:0.002100000000 存储在数据库中。 @FacesConverter("bigDecimal4DigitsConv
我正在尝试格式化金额。但是小数值没有以正确的方式四舍五入。 public class Testing { private java.text.DecimalFormat dispAmt;
我正在使用 DecimalFormatter 读取格式化的十进制字符串值并将其转换为 float 。但是,当我运行时: DecimalFormat formatter = new Decima
我使用十进制格式在“.”之后获取 2 个数字,当区域设置为美国或法国时,它工作正常,但当区域设置为 Ar(阿拉伯语)时,它会给出此错误: java.lang.NumberFormatException
我想显示最多 6 位小数的 GPS 坐标。例如如果我的 GPS 位置类似于 x.yyyyyyyyyy,我只想显示 x.yyyyyy,为此我使用 DecimalFormat 类。但是,如果数字类似于 8
我的代码如下: DecimalFormat df = new DecimalFormat("0.##"); return Double.parseDouble(df.format(sum)); Sum
我尝试在 Android 中使用 NumberFormatter 格式化数字。我使用下面的代码,它工作得很好: NumberFormat formatter = new DecimalFormat(
我有一个以便士为单位的整数货币(例如:1234)。我需要输出为:$12.34。我们不允许在此赋值中使用 double 或 float ,只能使用整数。 这是我所拥有的: totalChange = 1
我想将所有数字四舍五入到小数点后 1 位。 例如 22.0 -6.1 我正在使用: DecimalFormat decimalFormat = new DecimalFormat("0.0"); mi
目前,我在 JTable 中显示了具有 3 位小数的 BigDecimal 值。当我得到的值为 2.500 或 1.000 时,我想要 2.5 和 1.0。这就是我尝试这个的原因:
我使用DecimalFormat类将数字格式化为字符串,反之亦然。 在我的数据库中,Java double 以特定方式表示:例如 128.88 存储为“00012888”。为了实现这一点,我使用“00
收到所有的问候。 我需要验证一个文本对应于一个数字。项目区域设置为 es_CO。我现在遇到的问题是,带有用作小数点分隔符的句点的文本被解析为整数,而这应该是一个错误,因为在上述位置,小数点分隔符是一个
我是一名优秀的程序员,十分优秀!