【发布时间】:2010-03-02 09:15:14
【问题描述】:
我有一个双变量测试。我想提取小数点前的所有数字和小数点后的两位数,将输出存储在整数变量美元、美分中。我该怎么做?我不希望发生任何舍入。
示例:
double test= 12.1234
输出
int dollar =12;
int cents =12;
double test =1235.0
输出
int dollar=1235
int cents =0
【问题讨论】:
我有一个双变量测试。我想提取小数点前的所有数字和小数点后的两位数,将输出存储在整数变量美元、美分中。我该怎么做?我不希望发生任何舍入。
示例:
double test= 12.1234
输出
int dollar =12;
int cents =12;
double test =1235.0
输出
int dollar=1235
int cents =0
【问题讨论】:
对于货币,尤其是当您不想进行任何舍入时,您应该使用BigDecimal 类。比如:
BigDecimal test = new BigDecimal("12.1234");
int dollar = test.intValue();
int cents = test.scaleByPowerOfTen(2).intValue() - dollar * 100;
【讨论】:
你可以这样做:
double test= 12.1234;
int dollar = (int) test;
int cents = (int) ((test-dollar) * 100);
【讨论】:
怎么样:
dollar = test;
test -= dollar;
cents = test * 100;
第 1 行将 test (12) 的整数部分分配给整数“美元”。 第 2 行从测试值中删除 12 美元。 第 3 行将 test 小数部分的 100 倍分配给美分。请注意,我不在这里四舍五入。为此,您必须:
cents = (test + 0.005) * 100
【讨论】:
这样的事情怎么样。您可以根据需要简单地分配它们,而不是打印这些值。
double d = 32.456;
System.out.println( (int)d );
System.out.println( d-(int)d);
【讨论】:
String[] s = Double.toString(test).split(".");
String dol = s[0];
String cent = s[1].substring(0,1);
【讨论】:
对于大于10^13 的双精度值,名义小数点后不会有任何有效数字。
您不应使用double 或float 来表示财务数量。使用int 或long(适当缩放并明确检查溢出)或BigDecimal。
【讨论】:
int 并将最大可表示的 int 值(2^31 - 1)加 1,则计算将静默溢出,您将得到否定结果;即-2^31