maxscript 浮点数精度

mxs

num = "261599199.49" as float  -- 2.61599e+08
formattedPrint num format:".2f" --"261599200.00"

在mxs中从字符串转换到 double 或 float 都会丢失精度

在c#中这个数是正确的

var num = double.Parse("261599199.49");
Console.WriteLine(num);  //261599199.49

但是在3dmax中调用
.net的double又会被转换为3dmax的double

(dotNetClass "System.Double").Parse "261599199.49" //2.61599d+08

当客户对 "261599199.49" as float + 0 等于 261599200.00 感到奇怪的时候
应该如何保证计算的精度?

  1. 回到小学数学的知识,造一个字符串相加的函数
  2. 用c#编译一个dll使用,结果必须要字符串,防止被类型转换
posted @ 2023-11-08 16:28  trykle  阅读(84)  评论(0编辑  收藏  举报