标签: bigdecimal

非常非常大的C#浮点数

我正在进行一些人口建模(为了好玩,主要是为了实现承载能力和后勤功能的概念).该模型适用于多个行星(目前约有100,000个行星).当人口达到一个行星的承载能力时,居民开始分支到附近的行星,依此类推.

问题:10万多颗行星可以容纳很多人.不仅仅是C#Decimal可以处理.由于我使用这些数字做平均值和其他东西,我需要能够使用浮点(或者我只使用BigInt库).

有谁知道我可以使用的BigFloatingPoint类(或其他)?谷歌今天非常无益.我可以编写一个可以运行得很好的类,但是如果存在这样的东西,我宁愿使用预先存在的东西.

c# math bigdecimal

6
推荐指数
1
解决办法
3268
查看次数

Ruby on Rails十进制列

如果将ActiveRecord列类型指定为十进制,则Rails会将该数据库值作为ruby BigDecimal对象返回.

我的问题是,当使用这些字段并对它们执行额外的数学运算时,我是否应该在计算中始终使用BigDecimal值,或者可以使用浮点值.我不知道在同一计算中混合BigDecimal值和浮点值是否是一个好习惯.

混合示例:BigDecimal.new('12 .43')/ 4.2

相同类型示例:BigDecimal.new('12 .43')/ BigDecimal.new('4.2')

我问的原因是因为我需要使用浮点数,因为我需要十进制精度.使用浮点数0.1 + 0.7不等于0.8.

ruby-on-rails bigdecimal

6
推荐指数
1
解决办法
3795
查看次数

BigDecimal中Divide方法的Scale()

new BigDecimal("37146555.53880000").divide(new BigDecimal("1000000")).scale()
Run Code Online (Sandbox Code Playgroud)

这回来了10.但根据API,divide方法:

返回一个BigDecimal,其值为(this/divisor),其首选标度为(this.scale() - divisor.scale());

所以在这种情况下,37146555.53880000's规模是8,而且1000000规模是0.所以结果应该有一个规模8,而不是10.

我在这里错过了什么?

谢谢

java formatting bigdecimal

6
推荐指数
1
解决办法
2万
查看次数

为什么有从Float/Double到BigDecimal的隐式转换,而不是从String?

虽然与Java相比,从Doubles到BigDecimals 的转换情况有所改善

scala> new java.math.BigDecimal(0.2)
res0: java.math.BigDecimal = 0.20000000000000001110223024625156...

scala> BigDecimal(0.2)
res1: scala.math.BigDecimal = 0.2
Run Code Online (Sandbox Code Playgroud)

等等

val numbers: List[BigDecimal] = List(1.2, 3.2, 0.7, 0.8, 1.1)
Run Code Online (Sandbox Code Playgroud)

工作得很好,有一个隐含的转换是不合理的

implicit def String2BigDecimal(s: String) = BigDecimal(s)
Run Code Online (Sandbox Code Playgroud)

默认情况下可以将字符串转换为BigDecimals吗?

val numbers: List[BigDecimal] = List("1.2", "3.2", "0.7", "0.8", "1.1")
Run Code Online (Sandbox Code Playgroud)

还是我失去了一些东西和Scala解决Java的所有"问题"使用的BigDecimal构造与浮点值,而不是一个String,并且BigDecimal(String)基本上不斯卡拉不再需要?

floating-point scala implicit bigdecimal

6
推荐指数
1
解决办法
5199
查看次数

澄清BigDecimal.stripTrailingZeroes()的行为

为什么以下代码打印0.00而不是0

BigDecimal big = new BigDecimal("0.00");
big = big.stripTrailingZeros();
System.out.println(big.toPlainString());
Run Code Online (Sandbox Code Playgroud)

以下是stripTrailingZeroes的文档:

返回BigDecimal,它在数值上等于此值,但从表示中删除了任何尾随零.例如,从BigDecimal值600.0剥离尾随零,其中[BigInteger,scale]组件等于[6000,1],产生6E2,[BigInteger,scale]组件等于[6,-2]

返回:
数字等于BigDecimal,删除任何尾随零.

java bigdecimal

6
推荐指数
2
解决办法
2879
查看次数

用BigDecimal限制重要数字的任何巧妙方法

我想将Java BigDecimal舍入到一定数量的有效数字(非小数位),例如4位数:

12.3456 => 12.35

123.456 => 123.5

123456 => 123500

基本问题是如何找到BigDecimal的数量级,因此我可以决定小数点后使用的位数.

我能想到的只是一个可怕的循环,除以10直到结果<1,我希望有更好的方法.

顺便说一句,这个数字可能非常大(或非常小)所以我无法将其转换为双倍以使用登录它.

java bigdecimal

6
推荐指数
3
解决办法
7705
查看次数

Ruby on Rails nil无法强制转换为BigDecimal

nil can't be coerced into BigDecimal当我尝试执行计算时为什么会得到:这是代码:

模型/ drink.rb

class Drink < ActiveRecord::Base
  belongs_to :menu 
  before_save :total_amount 

def total_amount
    self.total_amount = self.price * self.quantity
end 
Run Code Online (Sandbox Code Playgroud)

模型/ menu.rb

class Menu < ActiveRecord::Base
    has_many :drinks, :dependent => :destroy
    accepts_nested_attributes_for :drinks, :allow_destroy => true
    #Validations

end
Run Code Online (Sandbox Code Playgroud)

*Drink是(嵌套)子模型,Menu是父模型当我尝试创建新饮料时,浏览器显示以下错误消息 nil can't be coerced into BigDecimal app/models/drink.rb:7:in 'total-amount' app/controllers/menus_controller.rb:47:in 'create' app/controllers/menus_controller.rb:46:in 'create'

应用程序/分贝/迁移

class CreateDrinks < ActiveRecord::Migration
  def change
    create_table :drinks do |t|
      t.string :name
      t.decimal :quantity,:precision => 8, :scale => 2
      t.decimal :price, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails bigdecimal

6
推荐指数
1
解决办法
9238
查看次数

BigDecimal.movePointRight()挂起非常大的数字

以下程序冻结,我无法弄清楚原因.

import java.math.*;

public class BigDec {
  public static BigDecimal exp(double z) {
       // Find e^z = e^intPart * e^fracPart.
       return new BigDecimal(Math.E).pow((int)z, MathContext.DECIMAL128).
           multiply(new BigDecimal(Math.exp(z-(int)z)), MathContext.DECIMAL128);
   }

   public static void main(String[] args) {
       // This works OK:
       BigDecimal x = new BigDecimal(3E200);
       System.out.println("x=" + x);
       System.out.println("x.movePointRight(1)=" + x.movePointRight(1));

       // This does not:
       x = exp(123456789);
       System.out.println("x=" + x);
       System.out.println("x.movePointRight(1)=" + x.movePointRight(1)); //hangs
   }
}
Run Code Online (Sandbox Code Playgroud)

出于目前的目的,第一种方法只是创建一个非常大的BigDecimal.(细节:它找到了z的力量,即使它太大而不是双倍.我很确定这种方法是正确的,尽管MathContexts可能不是最好的地方.)

我知道e ^ 123456789非常大,但我确实想要使用这样的数字.非常感谢任何答案.

java bigdecimal

6
推荐指数
1
解决办法
555
查看次数

如何在JUnit assertEquals中强制BigDecimal舍入?

每次我运行我的assertEquals时,我的预期BigDecimal都会被舍入,导致它失败.我如何确保它不圆或有另一种方式?

@Test
public void test() {
    BigDecimal amount = BigDecimal.valueOf(1000);
    BigDecimal interestRate = BigDecimal.valueOf(10);
    BigDecimal years = BigDecimal.valueOf(10);
    InterestCalculator ic = new InterestCalculate(amount, interestRate, years);
    BigDecimal expected = BigDecimal.valueOf(1321.507369947139705200000);
    assertEquals(expected, ic.getMonthlyPaymentAmount());
}
Run Code Online (Sandbox Code Playgroud)

java junit bigdecimal

6
推荐指数
1
解决办法
7248
查看次数

Struts2 BigDecimal Converter未转换为String

我有以下代码:

xwork-conversion.properties

java.math.BigDecimal=demo.BigDecimalConverter
Run Code Online (Sandbox Code Playgroud)

BigDecimalConverter.java

package demo;

import java.math.BigDecimal;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

public class BigDecimalConverter extends StrutsTypeConverter{

    @Override
    public Object convertFromString(Map context, String[] values, Class clazz) {
        System.out.println("BigDecimal : Converting from String : " + values[0]);
        return new BigDecimal(values[0]);
    }


    @Override
    public String convertToString(Map context, Object value) {
        String str = ((BigDecimal)value).toPlainString();
        System.out.println("BigDecimal : Converted to String : " + str);
        return str;
    }
}
Run Code Online (Sandbox Code Playgroud)

TheAction.java

package demo;

//imports...

public class TheAction extends ActionSupport {
    private BigDecimal bigField;   //with getter …
Run Code Online (Sandbox Code Playgroud)

javascript java struts2 bigdecimal struts2-json-plugin

6
推荐指数
2
解决办法
1545
查看次数